0

これは私のmain.cppです。私のプログラムはここから始まり、ここに問題があります:

2 つのエラーが表示されます。

行 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を実装する 1 つのクラス

  • 上記のTransactionMemoryRepositoryTransactionFileRepositoryに継承する 1 つのクラス

Google で解決策を数時間検索してきましたが、試したすべての方法でこれらのエラーを取り除くことはできません。

これは私が取り組んでいる C++ QT プロジェクトです。プロジェクト プロパティにインクルード パスを追加して、機能させる必要がありました。

#include されているすべてのファイルが存在します。

4

2 に答える 2

0

これはリンカー エラーです。これは、プログラムの一部 (さまざまな .cpp ファイル) は正常にコンパイルされましたが、リンカーはそれらをまとめる方法を理解できないことを意味します。

#includes (.h ファイルの) を使用して、関数が別のファイルで定義されていることをコンパイラに伝える必要があるのと同じように、リンカーにパラメーターを指定して、コンパイル済みファイル (.cpp から作成されたファイル) を使用する必要があります。それらの機能を見つけるために

コンパイル プロセスは、この質問への回答に記載されています。

于 2013-05-14T17:38:31.530 に答える