类实例化时未定义的引用错误

时间:2013-05-14 17:30:17

标签: c++ eclipse qt oop

这是我的 main.cpp 。我的程序从这里开始,这就是我遇到问题的地方:

我收到两个错误:

第23行的'BankController :: BankController(TransactionRepository )*的未定义引用

第19行的`TransactionFileRepository :: TransactionFileRepository(std :: string)的未定义引用

对于他们两个,类型是C / C ++问题,资源是main.cpp

#include "bankgui.h"
#include "Controller/BankController.h"
#include "Repository/TransactionFileRepository.h"
#include "Repository/TransactionMemoryRepository.h"
#include "Repository/TransactionRepository.h"

#include <QtGui>
#include <QApplication>
#include <string>
#include <iostream>
using namespace std;

int main(int argc, char *argv[]){

  string path = "DataStorage/Database.txt";

  //Instantiate the main data repository
  TransactionRepository* mainDatabase;
  mainDatabase = new TransactionFileRepository(path); // <-- Error here

  //Instantiate the main controller
  BankController* mainController;
  mainController = new BankController(mainDatabase); // <-- Same Error here

  //Starts the GUI
  QApplication app(argc, argv);
  BankGUI* mainWidget;
  mainWidget = new BankGUI(mainController);
  mainWidget->show();

  return app.exec();
}

我有3个班级:

  • 虚拟 TransactionRepository

  • 实现上述 TransactionMemoryRepository

  • 的一个类
  • TransactionMemoryRepository 继承到 TransactionFileRepository

  • 的一个类

我一直在谷歌搜索几个小时的解决方案,但我尝试的一切都没有摆脱这些错误。

我应该提一下,这是我正在研究的C ++ QT项目。我不得不在项目属性中添加一些工作的包含路径。

所有#included文件都存在。

2 个答案:

答案 0 :(得分:0)

这是链接器错误。这意味着您的程序的部分(不同的.cpp文件)已成功编译,但现在链接器无法弄清楚如何将它们组合在一起。

就像你必须使用#includes(.h文件)来告诉编译器在一个不同的文件中定义一个函数你需要给链接器提供参数,这样他就可以使用编译后的文件了。 .cpp)找到那些功能

编译过程在对此question的回答中进行了描述。

答案 1 :(得分:0)

发现问题。

显然我处理QT链接过程的.pro文件不是最新的。我在里面的HEADERS / SOURCES属性中丢失了.header文件。因此,他们没有使用它们。