Използвам родителски клас, който има някои виртуални методи. Когато извикам виртуалния метод в конструктора, той дава LNK2019
и LNK1120
грешки със съобщения "error LNK2019: unresolved external symbol "protected: virtual int ... referenced in function "public: __thiscall ...
" и "...\Debug\8puzzleProject.exe : fatal error LNK1120: 1 unresolved externals
".
Има ли начин да се реши този проблем или не трябва да извикам виртуален метод в конструктора?
Благодаря ти!
Ето и кодовете:
Клас с грешки:
#ifndef HEURISTICSEARCH_H
#define HEURISTICSEARCH_H
#include "BruteSearch.h"
class HeuristicSearch: public BruteSearch
{
public:
HeuristicSearch( int initial[BOARD_LIMIT][BOARD_LIMIT] );
bool search();
protected:
virtual int calculateUtility() = 0;
virtual int calculateUtility( Node* ) = 0;
bool check4Goal();
void checkNmove();
int findMin(int* values );
int utilityCost;
};
#endif
HeuristicSearch::HeuristicSearch( int initial[BOARD_LIMIT][BOARD_LIMIT] )
:BruteSearch( initial )
{
utilityCost = calculateUtility(); //After deleting this line, the error's gone
}
Родителски клас на родителския клас (няма грешка)
#ifndef BRUTESEARCH_H
#define BRUTESEARCH_H
#include <iostream>
#include <queue>
#include "Constants.h"
#include "Node.h"
class BruteSearch
{
public:
BruteSearch( int initial[BOARD_LIMIT][BOARD_LIMIT] );
virtual bool search(){ return false; }
protected:
bool check4Goal();
void printBoard();
int turn;
int goalBoard[BOARD_LIMIT][BOARD_LIMIT] ;
Node *currentPtr;
};
#endif