元のクラス (conferenceview) に何かが欠けているだけだと確信していますが、何が欠けているのかを正確に理解することはできません。Conferenceview クラスを含む tst_conferencepage.cpp ファイルをビルドしようとすると、conferenceview タイプのオブジェクトをインスタンス化しようとすると、アーキテクチャ x86_64 のシンボルが見つからないというエラー メッセージが表示されます。
会議ビュー.h:
#ifndef CONFERENCEVIEW_H
#define CONFERENCEVIEW_H
#include "constants.h"
class conferenceView
{
QString conference; // Holds the current conference selected by the fan
QString division; // Holds the current division selected by the fan
public:
conferenceView(); // Default Constructor
void setConference(QString); // Sets the current conference of the fan
QString getConference(); // Returns the current conference of the fan
void setDivision(QString); // Sets the current division of the fan
QString getDivision(); // Gets the current division of the fan
QSqlQuery queryConference(QString); // Returns a query for the teams in a specified conference
QSqlQuery queryDivision(QString); // Returns a query for the teams in a specified conference
QSqlQueryModel* populateView(QString, int); // Returns a QSqlQueryModel index to display the queried data to the table view
};
#endif // CONFERENCEVIEW_H
会議ビュー.cpp:
#include "conferenceview.h"
conferenceView::conferenceView()
{
this->conference = "";
this->division = "";
}
// Assigns conference to passed in QString
void conferenceView::setConference(QString conference) { this->conference = conference; }
// Returns conference
QString conferenceView::getConference() { return this->conference; };
// Assigns division to passed in QString
void conferenceView::setDivision(QString division) { this->division = division; }
// Returns division
QString conferenceView::getDivision() { return this->division; }
QSqlQuery conferenceView::queryConference(QString conference)
{
this->setConference(conference); // Sets current conference
// Queries database for team names by conference order by team name
QSqlQuery q;
q.prepare("SELECT TeamName "
"FROM TeamInfo "
"WHERE Conference = :conf "
"ORDER BY TeamName");
q.bindValue(":conf", conference);
q.exec();
return q;
}
QSqlQuery conferenceView::queryDivision(QString division)
{
// Sets current division
if( this->conference == "American Football Conference")
this->setDivision(division.prepend("AFC "));
else
this->setDivision(division.prepend("NFC "));
// Queries database for team names by division order by team name
QSqlQuery q;
q.prepare("SELECT TeamName "
"FROM TeamInfo "
"WHERE Division = :div "
"ORDER BY TeamName");
q.bindValue(":div", division);
q.exec();
return q;
}
QSqlQueryModel* conferenceView::populateView(QString str, int id)
{
QSqlQueryModel* qModel = new QSqlQueryModel;
// if id == 0, sets the qModel to the conference teams
if(id == 0)
{
this->setConference(str);
qModel->setQuery(this->queryConference(this->getConference()));
}
// if id == 1, sets the qModel to the division teams
else
{
this->setDivision(str);
qModel->setQuery(this->queryDivision(this->getDivision()));
}
// Sets the header title of the table view
qModel->setHeaderData(0, Qt::Horizontal, QObject::tr("Team Name"));
return qModel;
}
tst_conferencepage.cpp:
#include <QtTest>
#include "../NFL_Teams_App/conferenceview.h"
class ConferencePage : public QObject
{
Q_OBJECT
QVector<QString> AFC;
public:
ConferencePage();
private slots:
void testAFCConference();
};
ConferencePage::ConferencePage()
{
this->AFC = {"Baltimore Ravens", "Buffalo Bills", "Cincinnati Bengals",
"Cleveland Browns", "Denver Broncos", "Houston Texans",
"Indianapolis Colts", "Jacksonville Jaguars", "Kansas City Chiefs",
"Los Angeles Chargers", "Miami Dolphins", "New England Patriots",
"New York Jets", "Oakland Raiders", "Pittsburgh Steelers", "Tennessee Titans"};
}
void ConferencePage::testAFCConference()
{
conferenceView c; QSqlQuery query = c.queryConference("American Football Conference"); int index = 0; while(query.next()) QVERIFY(this->AFC.at(index) == query.value(index));
}
ConferencePage::testAFCConference() のブロックされたコードは、conferenceView 型のオブジェクトをインスタンス化する場所であり、エラーが発生します。
UnitTests.pro:
QT += core testlib sql
QT -= gui
TARGET = UnitTests
CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += \
tst_conferencepage.cpp
プロジェクト階層:
完全なエラー メッセージ:
アーキテクチャ x86_64 の未定義のシンボル:
"conferenceView::queryConference(QString)"、次から参照: tst_conferencepage.o の ConferencePage::testAFCConference() "conferenceView::conferenceView()"、次から参照: tst_conferencepage の ConferencePage::testAFCConference()。o ld: アーキテクチャ x86_64 のシンボルが見つかりませんでした 。 make_first] エラー 2 01:21:30: The process "/usr/bin/make" exited with code 2. プロジェクト NFLTeamsProject のビルド/デプロイ中にエラーが発生しました (キット: Desktop Qt 5.11.2 clang 64bit) ステップ "Make" の実行時
どんな助けでも大歓迎です、事前に感謝します!