我正在尝试一个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中运行这个简单的probram时,它会完美地编译和运行,但当我在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
}
^
我想知道我做错了什么,以及如何解决这个问题。
谢谢!
尝试将g++
版本更新为6.1.0
或更高版本。
即使有-std=gnu++17
标志,代码也不会在g++ v5.5.0
上编译。你可以在这里查看。(原因:当时编译器不支持嵌套命名空间。(
代码应在g++ v6.1.0
或更高版本上使用编译器默认值(无任何标志(进行编译。你可以在这里查看。
您可以通过在cmd
上运行:g++ --version
来检查编译器版本。
专业提示:找到CLion的编译器,如果它是g++
,则将其添加到路径中。(不需要浪费互联网数据来更新旧的g++
编译器!(