gpt4 book ai didi

c++ - namespace 名称无法识别

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

我有以下两个示例 C++ 文件:

文件:foo.cc

namespace test_ns {
int x = 100;
}

文件:bar.cc

using namespace test_ns;

extern int x;

int main()
{
x = 200;
return 0;
}

我一定是在做一些非常愚蠢的事情,因为我收到以下编译器错误:
bar.cc:2:17: 错误:“test_ns”不是命名空间名称 bar.cc:2:24: 错误:';' 之前需要命名空间名称 token

但是,我的主要问题(在我解决命名空间错误之后),按原样使用代码,我应该能够在 bar.cc 中使用“x”,还是我需要使用额外的限定符。

很抱歉打扰这么简单的问题,但我对这么简单的程序感到很困惑。

谢谢,艾哈迈德。

最佳答案

就像 C++ 中的所有其他名称一样,命名空间名称必须在访问之前声明。编译 bar.cc 时,编译器不知道 test_ns 是命名空间名称 - 您还没有为它提供声明。

命名空间和using namespace 并不是让您不必声明任何您想要使用的东西的魔术。为了使这项工作,创建一个头文件:

foo.hh

namespace test_ns {
extern int x;
}

然后在bar.cc#include "foo.hh",并从bar.cc中移除extern int x; 。这将使这两个翻译单元组成一个有效的程序。在你这样做之后,在 bar.cc 中引用 x 确实会引用 test_ns::x(感谢 using 指令)。


作为旁注,如果您不从 bar.cc 中删除 extern int x;(在包含头文件之后),它将声明一个新的全局变量 ::x 而不是引用 test_nest::x在源文件中使用命名空间 允许您在不引用类的命名空间的情况下定义类成员,但命名空间范围的实体(变量和函数)始终必须在命名空间内定义或使用限定名称。

关于c++ - namespace 名称无法识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20835841/

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