gpt4 book ai didi

c++ - 在头文件中声明类对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:03:33 24 4
gpt4 key购买 nike

我似乎陷入了一个基本问题,但我无法在任何地方找到解决方案。任何人,都会继续解释。

我有一个包含三个文件的程序; main.ccp, add.h, add.cpp.

我在 add.h 中声明类“SA”,并在 add.cpp 中定义我的所有函数。

附加.h

class SA {
...
public
int x;
} Obj1, Obj2;

主.ccp

#include "additional.h" 

int main() {

Obj1.x = 5;

...
}

编译时出现链接错误:error LNK2005: "class SA Obj1"(?Obj1@@3VSA@@A) 已经在 main.obj 中定义

对象的唯一定义出现在 add.h 中,没有其他地方。如果我在 main 而不是 header 中声明对象,程序编译得很好:

主.ccp

#include "additional.h" 

int main() {

SA Obj1;
Obj1.x = 5;

...
}

问题是我想主要使用 add.cpp 中的对象,但仍需要通过 main.cpp 初始化几个公共(public)值。有什么妙语吗?

最佳答案

在您的 .cpp 而不是 .h 中定义 Obj1 和 Obj2

添加.h

class SA {
...
public
int x;
};

主要.cpp

#include "additional.h" 

SA Obj1, Obj2;

int main() {

Obj1.x = 5;

...
}

如果要在 .h 文件中声明 Obj1 和 Obj2,请在 .h 文件中添加 extern,如下所示:

extern SA Obj1, Obj2;

但是您应该在项目的 .cpp 文件中声明对象:

主要.cpp

SA Obj1, Obj2;

原因是每次包含 .h 文件时,您都在声明 Obj1 和 Obj2。因此,如果两次包含 .h 文件,您将创建 Obj1 和 Obj2 的两个实例。通过添加关键字 extern,您是在告诉编译器您已经在项目中的某处(最好是在 .cpp 文件中)对这两个变量进行了标注。

关于c++ - 在头文件中声明类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/633634/

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