0

这是我的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 的所有文件都存在。

4

2 回答 2

0

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

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

编译过程在此问题的答案中有所描述。

于 2013-05-14T17:38:31.530 回答
0

发现了问题。

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

于 2013-05-24T13:15:16.377 回答