所以我正在做一些简单的C++练习,我注意到了一个有趣的壮举.归结为裸机可以尝试编译以下代码:
class nice
{
public:
nice() {}
};
int main()
{
nice n;
return 0;
};
Run Code Online (Sandbox Code Playgroud)
结果是编译错误,如下所示:
<file>.cpp: In function ‘int main()’:
<file>.cpp:11: error: expected `;' before ‘n’
<file>.cpp:11: warning: statement is a reference, not call, to function ‘nice’
<file>.cpp:11: warning: statement has no effect
Run Code Online (Sandbox Code Playgroud)
这是在Max OS X上使用常规g ++,我的一些朋友也试过Ubuntu,产生相同的结果.
这个专长似乎在于"好"这个词,因为重构它可以让我们编译.现在,我找不到C++或C关键字列表中的"好",所以我想知道这里是否有人有想法?
还有,推杆
class nice n;
Run Code Online (Sandbox Code Playgroud)
代替
nice n;
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.
PS我是一个相对的C++新手,来自ActionScript/.NET/Java/Python世界.
更新:
对,我的坏,我也有
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
在顶部,这似乎是问题的根源,因为没有它一切正常.
这是命名空间问题,但与命名空间 std无关。标头<iostream>正在拉入<unistd.h>
如果你试试
\n\nclass nice\n{\n public:\n nice() {};\n};\n\nint main(int argc, char *argv[])\n{\n nice n;\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n没有问题。
\n\n只需添加
\n\n#include <unistd.h>\nRun Code Online (Sandbox Code Playgroud)\n\n并且您将收到“expected \xe2\x80\x98;\xe2\x80\x99 before \xe2\x80\x98n\xe2\x80\x99”错误。命名空间 std 不参与其中。
\n\n所以解决方案和以前一样——将类nice放在它自己的命名空间中,它不会与全局::nice()冲突。
\n