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 つのクラス

3 つのクラスのヘッダー ファイルは次のとおりです。

トランザクションリポジトリ

#ifndef TRANSACTIONREPOSITORY_H_
#define TRANSACTIONREPOSITORY_H_

//---------------------------------------------------------------------------------------------------------------------

#include "../Domain/BankTransaction.h"
#include "../Utils/Vector.h"
#include "../Domain/exceptions.h"

//---------------------------------------------------------------------------------------------------------------------

class TransactionRepository {
public:

  /*
   *  Search and return the address of a transaction with the matching id
   */
  virtual BankTransaction* findById(int id) = 0;

  /*
   *  Returns the list of transactions
   */
  virtual Vector<BankTransaction*>findAll() = 0;

  /*
   *  Save a bank transaction in the list
   */
  virtual void save(BankTransaction) throw (RepositoryException) = 0;

  /*
   *  Update a transaction
   *
   */
  virtual void update(int id, int day, string type, float amount, string desc) = 0;

  /*
   *  Removes a transaction from our list
   */
  virtual void remove(int id) = 0;

  /*
   *  Return the total number of transactions from our list
   */
  virtual void getNr() = 0;

  /*
   *  Get a copy of the list
   */
  virtual void getCopy(Vector<BankTransaction> list) = 0;

  virtual ~TransactionRepository(){}

};

//---------------------------------------------------------------------------------------------------------------------

#endif /* TRANSACTIONREPOSITORY_H_ */

//---------------------------------------------------------------------------------------------------------------------

TransactionMemoryRepository

#ifndef TRANSACTIONMEMORYREPOSITORY_H_
#define TRANSACTIONMEMORYREPOSITORY_H_

#include "TransactionRepository.h"
#include "../Utils/Vector.h"

class TransactionMemoryRepository: public TransactionRepository {
public:
  TransactionMemoryRepository();
  virtual ~TransactionMemoryRepository();

  /*
   *  Search and return the address of a transaction with the matching id
   */
  BankTransaction* findById(int id);

  /*
   *  Returns the list of transactions
   */
  Vector<BankTransaction*>findAll();

  /*
   *  Save a bank transaction in the list
   */
  void save(BankTransaction) throw (RepositoryException);

  /*
   *  Update a transaction
   *
   */
  void update(int id, int day, string type, float amount, string desc);

  /*
   *  Removes a transaction from our list
   */
  void remove(int id);

  /*
   *  Return the total number of transactions from our list
   */
  void getNr();

  /*
   *  Get a copy of the list
   */
  void getCopy(Vector<BankTransaction> list);

protected:

  Vector<BankTransaction*> TransactionList;

};

#endif /* TRANSACTIONMEMORYREPOSITORY_H_ */

TransactionFileRepository

#ifndef TRANSACTIONFILEREPOSITORY_H_
#define TRANSACTIONFILEREPOSITORY_H_

#include <string>
#include "../Repository/TransactionMemoryRepository.h"
#include "../Utils/Vector.h"
#include "../Domain/BankTransaction.h"

using namespace std;

class TransactionFileRepository: public TransactionMemoryRepository {

private:
  string fileName;
  Vector<BankTransaction*> loadFromFile();
  void writeToFile();

public:
  TransactionFileRepository(string filepath);
  virtual ~TransactionFileRepository();
  virtual BankTransaction* findById(string id);
  virtual Vector<BankTransaction*> findAll();
  virtual void save(BankTransaction) throw  (RepositoryException);
  virtual void update(BankTransaction) throw (RepositoryException);
  virtual void remove(string studentId) throw (RepositoryException);
};

#endif /* TRANSACTIONFILEREPOSITORY_H_ */

最後の 2 つのクラスの .cpp ファイル (仮想クラスは .cpp ファイルを必要としないため) には、あまり実装されていません。私が追加したのは、(.h) リーダー ファイルの protptypes だけです。

私は解決策を求めてグーグルで2時間検索してきましたが、私が試したすべてがこれらのエラーを取り除くことはありません.

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

含まれるすべてのファイルが存在します。

4

0 に答える 0