这个问题以前已经解决过,但是我一直在寻找,这些都没有解释如何解决这个问题,我所处的状况。大多数都与外部库有关。
我正在尝试测试我的代码。我做了一个测试类,该类正试图通过包含该类的头文件来访问另一个类。但是,当我尝试调用其函数时,它只是给了我一个无法解决的外部符号错误。
这是我目前的尝试。在这里,我试图访问其他类的头文件以调用其功能。
CardTest.cpp
#include <iostream>
#include "../Header Files/Hand.h"
#include "../Header Files/HandValueCalculator.h"
using namespace std;
HandValueCalculator handValueCalculator;
Hand hand;
void Test() {
bool value = handValueCalculator.DoesHandHaveAce(&hand.cards);
cout << value << endl;
}
HandValueCalculator.h
#ifndef HANDVALUECALCULATOR_H_INCLUDED
#define HANDVALUECALCULATOR_H_INCLUDED
#include <vector>
#include "../Header Files/Card.h"
class HandValueCalculator {
public:
HandValueCalculator();
bool DoesHandHaveAce(std::vector<Card>* cards);
int GetValueWithoutAce(std::vector<Card>* cards);
int GetValueWithAce(std::vector<Card>* cards);
};
#endif // HANDVALUECALCULATOR_H_INCLUDED
HandValueCalculator.cpp
#include "../Header Files/HandValueCalculator.h"
HandValueCalculator::HandValueCalculator() {
}
bool HandValueCalculator::DoesHandHaveAce(std::vector<Card>* cards) {
int i;
for (i = 0; i < cards.size(); i++) {
if (cards.at(i).GetValue() == 11) {
return true;
}
}
return false;
}
int HandValueCalculator::GetValueWithoutAce(std::vector<Card>* cards) {
for (i = 0; i < cards.size(); i++) {
int cardValue = cards.at(i).GetValue()
totalValue = totalValue + cardValue;
}
return 0;
}
int HandValueCalculator::GetValueWithAce(std::vector<Card>* cards) {
return 0;
}
这是我得到的错误,我不认为编译器会认识到函数具有主体,并且由于找不到所声明函数的主体,因此它会返回此类错误。
> C:\Users\fagel\Documents\Blackjack\Blackjack\CardTest.obj : error LNK2019: unresolved external symbol "public: void __thiscall HandValueCalculator::a(void)" (?a@HandValueCalculator@@QAEXXZ) referenced in function "void __cdecl Test(void)" (?Test@@YAXXZ)
答案 0 :(得分:0)
您的HandValueCalculator
没有可用于链接器的void a();
实现。如果定义了a
函数,请确保您链接到包含该定义的目标文件。
但是,您很可能是the most vexing parse的受害者,并认为您已声明a
为变量(某处未显示),但您却声明了一个函数(未定义) )。