2

如果未调用 test,则此代码编译没有任何问题,因此我得出结论,c++ 允许创建具有相同名称的类和函数:

class test {};
void test() {}

int main() {
  test an_instance_of_test;
}

错误是:

<stdin>: In function 'int main()':
<stdin>:5:8: error: expected ';' before 'an_instance_of_test'
<stdin>:5:27: warning: statement is a reference, not call, to function 'test' [-Waddress]

而且我知道我不应该首先创建这样的明确性,但是这可能会在其他人的代码中遇到,我问是否有办法在不改变函数或类定义的情况下摆脱这种情况。

4

1 回答 1

3

您应该使用详细的类型说明符:

class test an_instance_of_test;

正如标准所说(§3.4.4):

详细类型说明(7.1.6.3) 可用于引用先前声明的类名枚举名,即使该名称已被非类型声明隐藏。

名称查找只是忽略任何非类型的名称:

根据 3.4.1 查找标识符,但忽略已声明的任何非类型名称。

于 2013-03-09T23:42:56.723 回答