【发布时间】:2020-08-08 08:41:54
【问题描述】:
我正在尝试使用 C++ 库,并且需要(想要)使用嵌套命名空间以提高代码的可读性。但是,当我尝试在 Windows 命令提示符中使用 g++ main.c 编译我的代码时遇到了问题。
下面的代码是我将拥有的示例——一个嵌套的命名空间,然后是一些函数或类:
namespace gpc::warning {
void raiseError() {
std::cout << "Error...\n";
exit(1);
}
}
以下代码是我的main.c 文件的示例:
#include <iostream>
#include "Warning/raise.hpp"
int main() {
std::cout << "Hello, World!" << std::endl;
gpc::warning::raiseError();
return 0;
}
当我在 CLion 中运行这个简单的问题时,它可以完美编译并运行,但是当我在 Windows 10 命令提示符中运行代码时,我收到以下错误,告诉我有关命名空间的一些信息:
In file included from main.cpp:2:0:
Warning/raise.hpp:10:14: error: expected '{' before '::' token
namespace gpc::warning {
^
Warning/raise.hpp:10:16: error: 'warning' in namespace '::' does not name a type
namespace gpc::warning {
^
main.cpp: In function 'int gpc::main()':
main.cpp:9:10: error: 'gpc::warning' has not been declared
gpc::warning::raiseError();
^
main.cpp: At global scope:
main.cpp:12:1: error: expected '}' at end of input
}
^
我想知道我做错了什么以及如何解决这个问题。
谢谢!
【问题讨论】:
-
您是否检查过用于定义嵌套命名空间的语法是否与您的编译器版本兼容?参考资料:en.cppreference.com/w/cpp/language/namespace
-
我使用 C++ 20,所以我认为
n1::n2语法有效... -
您使用的是哪个 g++ 版本??分享以下命令的输出:
g++ --version. -
@Pencilcaseman 我认为 Windows 上可用的任何 g++ 编译器都不支持 C++20。
-
显然我使用的是 g++ 版本 4.9.2,我认为这可能是问题
标签: c++ gcc namespaces command-prompt clion