2017-01-09 37 views
0

我正在嘗試編寫一個基於接口的文件加載器,它將以多種方式爲不同的文件類型實現。我嘗試了所有在我腦海中找到的或在互聯網/互聯網上找到的組合,但我一直在收到錯誤。我究竟做錯了什麼?錯誤:在C++中實現接口模式時未定義的typeinfo引用

核心/ loader.h:

#ifndef CORE_LOADER_H 
#define CORE_LOADER_H 

class LoaderInterface 
{ 
    public: 
     virtual bool reloadFile(); 
}; 

#endif // CORE_LOADER_H 

核心/ lodaer/own.h:

#ifndef CORE_LOADER_OWN_H 
#define CORE_LOADER_OWN_H 

#include "src/core/loader.h" 

class Own : public LoaderInterface 
{ 
    public: 
     bool reloadFile(); 
}; 

#endif // CORE_LOADER_OWN_H 

核心/裝載機/ own.cpp:

#include "src/core/loader/own.h" 

bool Own::reloadFile(){ 
    return true; 
} 

鏈接說:

(..)/qt/build-Foo-Desktop_Qt_5_7_0_GCC_64bit-Debug/own.o:-1: error: undefined reference to `typeinfo for LoaderInterface' 
+2

它無關的命名空間。或Qt。刪除這兩個,你仍然會得到相同的錯誤。 – juanchopanza

+0

@juanchopanza隨意提出一個更合適的標題。 – Luke

+2

「錯誤:使用不完整類型」如何?這會讓谷歌變得簡單。 – juanchopanza

回答

1

你應該在接口類使用純虛函數

class LoaderInterface 
{ 
    public: 
     virtual bool reloadFile() = 0; 
}; 
+0

對於那些低估了這個答案的人,請解釋你爲什麼那樣做。它的工作和看起來像我解決我的問題。如果它也被解釋了會很好。 – Luke

+2

@Luke如果你沒有包含'= 0'並且沒有包含'LoaderInterface :: reloadFile'的定義,那麼錯誤信息就不會是你問題中的那個。 –

+0

嗯,它並不真的告訴我爲什麼會發生這種情況,但我會在互聯網上尋找完整的解釋。感謝大家的幫助 – Luke