我有下面的代碼:Undifined參考`虛表在和Base2
// IBase.h
#include <iostream>
class IBase{
public:
virtual string getId();
};
// IBase.cpp
#include "IBase.h"
string IBase::getId(){};
// Base.h
#include <iostream>
#include <string>
#include "IBase.h"
using namespace std;
class Base : public IBase{
protected:
string id;
public:
Base(string _id);
string getId();
};
// Base.cpp
#include "Base.h"
Base::Base(string _id){
id = _id;
}
string Base::getId(){
return id;
}
// Base2.h
#include <iostream>
#include <string>
#include "Base.h"
using namespace std;
class Base2 : public Base{
public:
Base2(string _id);
string getId();
};
// Base2.cpp
#include "Base2.h"
Base2::Base2(string _id) : Base(_id){};
,我得到未定義參考`VTABLE在和Base2當我編譯項目!這是我想念的東西嗎?
順便說後無需分號,推杆'{};'在這些情況下是'pedantic'下的警告。這也許值得投入頭球衛士。 – chris
爲了響應chirs的評論,指定沒有實現的「abstract」函數的正確方法是使用語法'virtual void blah(int i)= 0;'。例如,您的IBase類應該看起來像http://ideone.com/VCO1D。不需要IBase.cpp。 – Lalaland
如果我刪除'IBase.cpp',我有一個編譯錯誤! –