我在用C++编程一个21点游戏,遇到了好几次这个问题,甚至我已经在谷歌上搜索过了,他们的解决方案仍然不适合我,所以我想知道哪里出了问题。
当我在Clion中编译它时,错误为:
体系结构X86_64的未定义符号:
“Blackjack::Stand()”,引用自:
main.cpp.o中的_main
ld:找不到体系结构x86_64的符号clang:错误:链接器命令失败,退出代码为%1(使用-v查看调用)
#include <iostream>
#include "blackjack.h"
using namespace std;
int main() {
Blackjack bj;
for (int i = 0; i < 11; ++i) {
bj.dealerCards.push_back(i);
}
for (int i = 0; i < 10; ++i) {
bj.playerCards.push_back(i);
}
bj.stand();
return 0;
}
#pragma once
#include <vector>
#include <numeric>
using namespace std;
class Blackjack {
public:
vector<int> desk; // public only for test, should be protected or private
public: // public only for test, should be protected
vector<int> dealerCards;
vector<int> playerCards;
public:
int hit() {};
void stand();
};
#pragma once
#include <iostream>
#include <numeric>
#include "blackjack.h"
void Blackjack::stand() {
......
}
在源代码文件结构中,虽然
您应该将
为了理解其中的原因,我们需要学习两个新术语:
在编译代码时,编译器将只读取并编译一次。cpp文件中的所有常规函数,但它将读取每个。cpp文件的
异常-
class B
{
void foo() { std::cout << "This code will be in every place it called" << std::endl; }
};
inline bar() { std::cout << "This function too!" << std::endl; }
为了确保它只编译一次,我们应该始终在。cpp文件中定义函数,并在头文件中声明它们。