我确定我只是在我的原始班级(会议视图)中缺少了一些东西,但是我无法完全围绕丢失的内容来思考。当我尝试构建包括会议视图类的tst_conferencepage.cpp文件时,当我实例化会议视图类型的对象时,收到关于未为架构x86_64找到的符号的错误消息。
conferenceview.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
conferenceview.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.o中的ConferencePage :: testAFCConference()ld:找不到架构x86_64的符号lang:错误:链接器 命令失败,退出代码为1(使用-v查看调用)make [1]: * [UnitTests]错误1产生:* [sub-UnitTests-make_first]错误2 01:21:30:进程“ / usr / bin / make”以代码2退出。 构建/部署项目NFLTeamsProject(工具包:Desktop Qt 5.11.2 clang 64bit)执行步骤“ Make”时
感谢您的帮助,在此先感谢您!
答案 0 :(得分:0)
您在conferenceview.cpp
文件中缺少conferenceview.h
和UnitTest.pro
,因此链接器不知道应该从什么构建测试。您的.pro
文件应如下所示:
QT += core testlib sql
QT -= gui
TARGET = UnitTests
CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle
TEMPLATE = app
VPATH = "../NFL_Teams_App"
SOURCES += \
tst_conferencepage.cpp \
conferenceview.cpp
HEADERS += \
conferenceview.h