これは私の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 つのクラス
上記のTransactionMemoryRepositoryをTransactionFileRepositoryに継承する 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 プロジェクトです。プロジェクト プロパティにインクルード パスを追加して、機能させる必要がありました。
含まれるすべてのファイルが存在します。