декларация ref struct в классе ref - PullRequest
1 голос
/ 30 ноября 2011

Я застрял в коде с большим количеством ошибок.Я работаю над классом ref, в котором я объявил структуру, я узнал, что мне не разрешено использовать обычную структуру, это должна быть структура ref.но все равно я получаю странную ошибку:

ошибка C3816: 'namespace :: className :: structName' было ранее объявлено или определено с помощью другого управляемого модификатора

пример кода:

ref class someclass{

    ref struct somestruct{
        char a1;
        char a2;
    };
    //my decleration.
    array<struct somestruct>^ variable = gcnew array<struct somestruct>(5);
};

Это правильно?если нет, пожалуйста, помогите мне ...

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

Это один из способов исправить это:

ref class someclass{

    ref struct somestruct{
        char a1;
        char a2;
    };
    array<somestruct^>^ variable;

    someclass() : variable(gcnew array<somestruct^>(5))
    {
    }
};
2 голосов
/ 30 ноября 2011

Вы сражаетесь с основным синтаксисом здесь. Различие между типами значений и ссылочными типами является очень важным в управляемом коде. Вы объявили ref struct, что требует использования шляпы в объявлении массива. Также очень вероятно, что вам не нужна ссылка на структуру здесь. Они действуют точно как классы и распределяются в куче. Простые структуры, подобные этой, должны иметь структуру value вместо этого, ближайший эквивалент структуры C или C ++.

Не используйте ключевое слово struct в объявлении массива, это синтаксис языка C. Последняя проблема в том, что вы не можете инициализировать такой член, только компилятор C # поддерживает это. Который реализует это путем перемещения кода в конструктор. В C ++ / CLI вы должны сделать это самостоятельно. Итак, вероятный синтаксис, который вам нужен здесь:

public ref class someclass {
private:
    value struct somestruct{
        char a1;
        char a2;
    };
    array<somestruct>^ variable;
public:
    someclass() {
        variable = gcnew array<somestruct>(5);
        //todo: initialize array members
    }
};

Гадание на то, что должно быть частным против публичного.

1 голос
/ 30 ноября 2011

В сообщении об ошибке говорится, что вы забыли ref до struct.
Поскольку это не C, вам не нужно ставить имя типа перед struct. Просто используйте array<somestruct^>^.
(Но array<ref struct somestruct^>^ тоже работает)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...