我使用具有一些虛擬方法的父類。當我在構造函數中調用虛方法時,它會給「error LNK2019: unresolved external symbol "protected: virtual int ... referenced in function "public: __thiscall ...
」和「...\Debug\8puzzleProject.exe : fatal error LNK1120: 1 unresolved externals
」消息帶來LNK2019
和LNK1120
錯誤。構造函數中的C++調用虛擬方法
有沒有辦法解決這個問題,或者我不應該在構造函數中調用虛方法?
謝謝!
這裏是代碼:
類有錯誤:
#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
可以請你發佈你的代碼?你單獨使用你的父類嗎?沒有爲虛擬方法提供實現,它將無法正常工作。 – nio
[在構造函數中調用虛函數](http:// stackoverflow。com/questions/962132/calling-virtual-functions-inside-constructors) –