所以我試圖實現一個國際象棋遊戲。我已經得到了最常見的連接錯誤:沒有默認構造函數的C++繼承
error LNK2019: unresolved external symbol "public: __thiscall Bishop::~Bishop(void)" ([email protected]@[email protected]) referenced in function _main
因此,這裏有兩個相關的類:
Bishop.h(有沒有 「Bishop.cpp」)
#pragma once
#ifndef BISHOP_H
#define BISHOP_H
#include "ChessPiece.h"
class Bishop : public ChessPiece
{
public:
Bishop(bool isWhite) : ChessPiece(isWhite) {
}
~Bishop(void);
// pure virtual functions
virtual CellLocation *listAvailableMoves(void) {
return 0;
}
virtual char getPieceType() {
return PIECE_TYPE_BISHOP;
}
};
#endif
ChessPiece.h(沒有 「ChessPiece.cpp」)
#ifndef CHESSPIECE_H
#define CHESSPIECE_H
#include "Globals.h"
// Abstract class for inheritence
class ChessPiece {
public:
// Constructor
ChessPiece(bool isWhite) : m_isWhite(isWhite) {
}
~ChessPiece(void);
// pure virtual functions
virtual CellLocation *listAvailableMoves(void) = 0;
virtual char getPieceType() = 0;
// ACCESSORS, MUTATORS
// isWhite member
bool isWhite(void) const{
return m_isWhite;
}
void setIsWhite(bool isWhite) {
m_isWhite = isWhite;
}
protected:
bool m_isWhite;
};
#endif
在「通配als.h「這些定義很少,但與我的功能無關。 所以我什麼我做了主很乾脆:
Bishop somePiece(true);
cout << sizeof(somePiece) << endl;
但它給了LNK2019錯誤。
現在我知道該解決方案應該是向兩個類添加默認構造函數(這是因爲某種原因不起作用),但我不希望它們使用默認值進行初始化。因此,我不希望任何這些類的默認構造函數。
有沒有什麼辦法,我不創建默認的構造函數,並擺脫它呢?
編譯器抱怨你沒有定義'〜主教(無效) '但 – billz
鏈接器抱怨缺少析構函數實現。與構造函數無關! –
該死的......是的,這是它的感謝。 –