2017-01-09 7 views
0

Я пытаюсь написать загрузчик файлов на основе интерфейса, который будет реализован разными способами для разных типов файлов. Я пробовал каждую комбинацию, которая приходила мне на ум или находилась в стеке/в Интернете, но я продолжаю получать ошибку. Что я делаю не так?ошибка: неопределенная ссылка на typeinfo при реализации шаблона интерфейса в C++

ядро ​​/ 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; 
} 

Linker говорит:

(..)/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

Как насчет «ошибки: недопустимое использование неполного типа»? Это упростит работу с Google. – juanchopanza

ответ

1

вы должны использовать чистой виртуальной функции в классе интерфейса:

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

Кому-то, кто отклонил этот ответ, объясните, почему вы это сделали. Он работает и смотрит на меня как на решение моей проблемы. Было бы неплохо, если бы это было также объяснено. – Luke

+2

@ Luke, если вы не включили '= 0' и не включали определение для' LoaderInterface :: reloadFile', сообщение об ошибке не было бы в вашем вопросе. –

+0

Ну, на самом деле это не говорит мне, почему это происходит, но я буду искать полное объяснение в Интернете. Спасибо за вашу помощь – Luke