Как правильно вызывать регистр дел с переключением на перечисление класса в C ++ / CLI? - PullRequest
0 голосов
/ 02 мая 2019

Я создал enum, чтобы выбирать между различными вариантами. На последнем этапе я получаю обратно выбранное перечисление.

Но что-то не так с моим выражением регистра.

Enum:

  public enum class MyObjForm { Rechteck, Ellipse };

Die Klasse:

  public ref class Fenster2: public System::Windows::Form{
        private: MyObjForm ^ form;
                 double breite;
                 double hoehe;

        Fenster2(MyObjForm ^ obj, double h, double b) : form{ obj }, hoehe { h }, breite{ b }
    {
        InitializeComponent();
    }
 ..
 }

Корпус переключателя:

  switch (form) {
    case MyObjForm::Rechteck:
        gr->DrawRectangle(pen, 30.0f, 30.0f, breite, hoehe);
        break;
      case MyObjForm::Ellipse:
        gr->DrawEllipse(pen, 30.0f, 30.0f, breite, hoehe);
        break;
}

Visual Studio говорит, что в switch (форме) есть ошибка, это должен быть целочисленный тип или тип перечисления.

Но, кроме того, что это говорит: выражение переключателя типа "MyObjForm ^" не разрешено.

И константные выражения не верны.

Я не вижу правильного ответа, но я не люблю переходить с класса enum на enum. Класс существует, чтобы защитить его, поэтому я думаю, что он должен быть там, даже если бы было проще без него. Я использую enum, чтобы узнать, как его использовать.

Ответы [ 2 ]

1 голос
/ 03 мая 2019
public enum class MyObjForm { Rechteck, Ellipse };

MyObjForm ^ form;

Управляемые перечисления являются типами значений, а не ссылочными типами. ^ указывает на управляемую ссылку. Ссылка на тип значения излишне упаковывает его, что является странным типом в C ++ / CLI и даже невозможно в C #.

Удалите ^ из всех мест, которые вы используете MyObjForm, и все будет в порядке.

0 голосов
/ 03 мая 2019

Я сделал это!

switch((MyObjForm)form){
//cases
}

Мне нужна форма (MyObjForm), чтобы использовать класс enum, и она работает

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