以下给我一个错误:
struct foo
{
};
int main()
{
foo foo;
foo foo2;
}
main.cpp:14:9: error: expected ';' before 'foo2'
foo foo2 = foo;
main.cpp:14:19: warning: statement has no effect [-Wunused-value]
foo foo2 = foo;
然而foo foo, foo2
完美无缺。什么规则阻止我做第一种方式?
你们所有人都在贬低或留下粗鲁的评论,而不是回答这个问题。我要求的规则是第一种不编译的方法。
答案 0 :(得分:6)
对象foo的声明,其名称与结构的名称一致,隐藏了结构的名称。所以在以下声明中
foo foo2;
编译器将名称foo
视为对象的名称而不是结构的名称。要逃避错误,您可以使用详细的结构名称foo。例如
struct foo
{
};
int main()
{
foo foo;
struct foo foo2;
}
顺便说一句,以下有趣的声明是有效的:)
struct foo { int foo; } foo, foo2 = foo;