【发布时间】:2012-10-08 06:13:24
【问题描述】:
尝试在不同的编译器上编译以下代码会给我两个不同的结果:
struct S{};
struct T{S S;};
int main(){}
如您所见,在T 内部,我有一个与之前定义的类S 同名的对象。
在 GCC 4.7.2 上,I get the following error 与 T 内的 S S; 声明有关:
错误:“S T::S”的声明 [-fpermissive]
错误:从 'struct S' [-fpermissive] 更改 'S' 的含义
但是,将其移出课堂(或移入main)works fine:
struct S{};
S S;
int main(){}
它给我的错误究竟是什么意思?
在 Visual Studio 2012 中,整个程序编译并运行,没有任何错误。将其粘贴到 this Clang 3.0 compiler 也不会出错。
哪个是对的?我真的可以这样做吗?
【问题讨论】:
-
啊,我明白了——我误读了诊断结果。
-
@ildjarn,这是一个相当奇怪的标志。它似乎反过来工作。通常,负责警告的标志出现在方括号中。
-
别这样。重点是什么?迷惑?请注意,完成此操作后,如果没有明确限定命名空间,就不能再在成员函数中引用类型
S... -
@DavidRodríguez-dribeas,我意识到这一点。我不打算这样做:)
标签: c++ g++ implementation clang visual-c++-2012