local_objects; } 当我编译时,我可以稍后在代码中创建一个 Communicator-6ren">
gpt4 book ai didi

c++ - 将我的对象声明为 extern 会出现 "not declared in this scope"错误

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:45 25 4
gpt4 key购买 nike

我在标题中有一个类:

class Communicator {
public:
std::map<std::string,obj::obj_version<obj::tkt_metadata>*> local_objects;
}

当我编译时,我可以稍后在代码中创建一个 Communicator 并正常使用 map ,没有问题。

但是,一旦我在类声明之后放置:

extern Communicator comm;

并添加:

Communicator comm;

对于 header 的实现文件,我得到“错误:'obj'未在此范围内声明”等,其中 obj 是包含 obj_version 和 tkt_metadata 的命名空间(并且在包含之前我的通讯器标题)。

这是怎么回事,我能做些什么来让它正确编译吗?谢谢!

最佳答案

哦,我刚刚通过有用的评论发现了这个问题(它已被删除)。

所以我的头文件之一 object.h(不包含 CommunicatorCommunicator 工作的对象)实际上看起来有点像这样:

-- obj_version and tkt_metadata
-- #include "communicator.h"
-- more stuff

我的实现文件是这样的:

-- #include "communicator.h"
-- define the functions
-- Communicator comm;

然而,有人在评论中提到了C++中的“编译单元”。原来头文件不是自己编译的,只有实现文件被编译,并且头文件只是为每个实现文件放置到位。

因此,虽然我的 Communicator 包含在它需要查看的对象之后(在 object.h 中),但实现文件仅包含 communicator.h,而不包含 object.h(其中包含 communicator .h 依次)。编译单元尝试编译 Communicator,而没有在它之前定义命名空间 obj 中的对象。

所以答案是放在communicator.cc中:

-- #include "objects.h"
-- define the functions
-- Communicator comm;

这是一个相当简单的问题(仅凭我提供的信息可能不会有人回答)但是谢谢,你让我解决了我自己的误解!

关于c++ - 将我的对象声明为 extern 会出现 "not declared in this scope"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910654/

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