为什么我不能使用与类名相同的变量名?

时间:2014-10-03 12:27:28

标签: c++

以下给我一个错误:

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完美无缺。什么规则阻止我做第一种方式?

你们所有人都在贬低或留下粗鲁的评论,而不是回答这个问题。我要求的规则是第一种不编译的方法。

1 个答案:

答案 0 :(得分:6)

对象foo的声明,其名称与结构的名称一致,隐藏了结构的名称。所以在以下声明中

foo foo2;

编译器将名称foo视为对象的名称而不是结构的名称。要逃避错误,您可以使用详细的结构名称foo。例如

struct foo
{
};

int main()
{
    foo foo;
    struct foo foo2;
}

顺便说一句,以下有趣的声明是有效的:)

struct foo { int foo; } foo, foo2 = foo;