gpt4 book ai didi

c++ - 错误已定义

转载 作者:行者123 更新时间:2023-11-30 04:00:13 25 4
gpt4 key购买 nike

您好,我刚刚创建了一个示例类并在 main 中使用它,但我收到了已定义的错误。

示例.h

#ifndef __sample__
#define __sample__
#include<iostream>
using namespace std;

int count = 10;

class sample
{
public:
sample();
int Get();
private:
int i;
};
#endif

示例.cpp

#include "sample.h"
sample::sample()
{
cout<<"hello two";
}
int sample::sample()
{
return 10;
}

main.cpp

#include <iostream>
#include "sample.h"
using namespace std;

int main(void)
{
int test = count;
return 0;
}

链接错误:main.obj : error LNK2005: "int count"(?count@@3HA) already defined in sample.obj

如果你看到上面的类(class),我正在使用#ifndef 和#define,实际上一旦我们认为我们在很多地方都包含数据,就会声明数据。有人能清楚地解释一下为什么它会给出那个链接错误吗。

最佳答案

请记住,#include 的字面意思是“在此处添加此文件的内容”。
Include guards 仅防止一个文件的内容被多次包含,每个包含它的文件

预处理器完成预处理后,编译器会看到:

示例.cpp

[iostream 内容在这里...]

using namespace std;

int count = 10;

class sample
{
public:
sample();
int Get();
private:
int i;
};

sample::sample()
{
cout<<"hello two";
}
int sample::sample()
{
return 10;
}

main.cpp

[iostream 内容在这里...]

using namespace std;

int count = 10;

class sample
{
public:
sample();
int Get();
private:
int i;
};

using namespace std;

int main(void)
{
int test = count;
return 0;
}

如您所见,count两个 定义,每个文件一个(正式名称为“翻译单元”)。

解决方案是在“sample.h”中声明变量

extern int count;

并且在 sample.cpp 中有唯一的定义:

int count = 10;

(并且您不应该将 using namespace std; 放在 header 中。)

关于c++ - 错误已定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26425445/

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