gpt4 book ai didi

c++ - 链接器错误2005似乎是由构造函数引起的

转载 作者:行者123 更新时间:2023-12-03 07:11:58 25 4
gpt4 key购买 nike

我在下面不断收到此链接器错误
enter image description here
似乎是由下面的构造函数引起的

/*Card.h*/
#ifndef Card_H
#define Card_H

#pragma once
#include <iostream>
using namespace std;
#include <cassert> //for assert()
#include <string>
#include <time.h>

using namespace std;

/*Card.h*/
enum color { club, diamond, heart, spade };

class Card {
public:
Card(color c = club, int v = 1);//this line

private:
color col;
int val;
};

/*Constructor*/
Card::Card(color c, int v) {// and this too
col = c;
val = v;
}

#endif
我对播放器或myFile都无法重新定义卡感到困惑,因为它们甚至不包含Card.h文件。

最佳答案

在头文件中:

Card::Card(color c, int v) {
这是 Card的构造函数的定义。这意味着每个翻译单元(一个C++源文件),此头的 #include最终定义了此构造函数。请记住,头文件的 #include完全等效于在逻辑上将头文件 逐字的内容插入到 #include的C++源文件中。
如果您有十个包含此 header 的C++源文件,则意味着这十个C++源文件中的每一个都定义了此构造函数。
这违反了C++的 One Definition Rule,后者要求每个(非内联的)对象或函数必须定义一次。不多不少。
这解释了您的编译错误。您只需要将此构造函数的定义移到C++源文件中的 中即可。

关于c++ - 链接器错误2005似乎是由构造函数引起的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64707759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com