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 に答える