C ++编译错误LNK2019:未解决的外部符号错误

时间:2019-06-16 00:10:03

标签: c++ error-handling compiler-errors

这个问题以前已经解决过,但是我一直在寻找,这些都没有解释如何解决这个问题,我所处的状况。大多数都与外部库有关。

我正在尝试测试我的代码。我做了一个测试类,该类正试图通过包含该类的头文件来访问另一个类。但是,当我尝试调用其函数时,它只是给了我一个无法解决的外部符号错误。

这是我目前的尝试。在这里,我试图访问其他类的头文件以调用其功能。

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)

1 个答案:

答案 0 :(得分:0)

您的HandValueCalculator没有可用于链接器的void a();实现。如果定义了a函数,请确保您链接到包含该定义的目标文件。

但是,您很可能是the most vexing parse的受害者,并认为您已声明a为变量(某处未显示),但您却声明了一个函数(未定义) )。