Вызов cli :: array <int>:: Reverse через typedef в C ++ / CLI - PullRequest
0 голосов
/ 02 июня 2010

Вот что я пытаюсь:

typedef cli::array<int> intarray;

int main(){
    intarray ^ints = gcnew intarray { 0, 1, 2, 3 };
    intarray::Reverse(ints);    // C2825, C2039, C3149

    return 0;
}

Компиляция привела к следующим ошибкам:

.\ints.cpp(46) : error C2825: 'intarray': must be a class or namespace when followed by '::'
.\ints.cpp(46) : error C2039: 'Reverse' : is not a member of '`global namespace''
.\ints.cpp(46) : error C3149: 'cli::array<Type>' : cannot use this type here without a top-level '^'
        with
        [
            Type=int
        ]

Я что-то здесь не так делаю?

Редактировать: Это ошибка компилятора?

Ответы [ 2 ]

1 голос
/ 02 июня 2010

Это интересный вопрос. Обе следующие записи работают

   ints->Reverse(ints);
   array<int>::Reverse(ints);

как и следовало ожидать. Поскольку typedef вводит синоним, я ожидаю, что он будет работать для вас, но, очевидно, это не работает в VC ++ 2008 Express.

0 голосов
/ 02 июня 2010

Ты должен использовать. для вызова функций-членов. :: используется только для разрешения времени компиляции.

Edit: Ой, я совершенно неправильно понял ваш код. Вы должны использовать ints.Reverse (), а не IntArray :: Reverse (ints). Более того, вполне возможно, что правила для типов .NET в C ++ / CLI одинаковы для типов .NET в C #, то есть эту точку всегда следует использовать.

...