0
#include <iostream>

const int SIZE = 5;

struct tester
{
    int array[SIZE];

    enum 
    {
        SIZE = 3
    };

    void size()
    {
        std::cout << sizeof(array) / sizeof(int);
    }
};

int main(int argc, char** argv)
{
    tester t;
    t.size();
    return 0;
}

私たちが知っているように

クラス内の任意の時点で定義された名前は、クラスのすべてのメンバー関数のスコープ内にあります。したがって、enumSIZE は関数 size のスコープ内にあり、グローバル変数 SIZE を非表示にします。そのため、配列サイズは 5 ではなく 3 と出力されるはずですが、コンパイルすると未定義であることが示されます。なぜここで何が起こっているのですか?

4

3 に答える 3

0

SIZE を再定義しているため、コンパイラは、コメントの 1 つで言及した「意味の変更」エラーを表示します。

于 2013-06-22T11:11:34.233 に答える