Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > C/C++: Общие вопросы > try catch выдаёт ошибку с Exception


Автор: Katerina1993 30.12.18, 07:42
Пытаюсь использовать try catch, но мне выдаёт ошибку
Цитата

error C3699: &: это косвенное обращение невозможно использовать для типа "System::Exception"

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    private: System::Void board_CellValueChanged(System::Object^  sender, System::Windows::Forms::DataGridViewCellEventArgs^  e) {
    try{
        board[e->ColumnIndex,e->RowIndex]->Value = board[e->ColumnIndex,e->RowIndex]->Value->ToString()->ToUpper();
    }
    catch(Exception& e){}
            
    }

Автор: Wound 09.01.19, 06:56
Цитата Katerina1993 @
Пытаюсь использовать try catch, но мне выдаёт ошибку

Вы бы для начала почитали, чем отличается C++/CLR(который к С++ не имеет отношения и является поделкой Microsoft для склеивания кода на native C++ и кода managed code .NET) от С++. И уж тогда бы начинали с правильного создания проекта. У вас 90% вопросов, которые вы тут задаете - отпали бы сами собой. Я так понял изучаете вы С++ по книжкам С++, но пишете почему то на С++ CRL. Вы тогда уж либо книжку возьмите по С++ CLR либо создавайте проект C++(без всяких CLI/CLR).
Конкретно в вашем случае вам компилятор говорит что ссылочные типы С++ не применимы к объектам .NET.
Другими словами вы ловите исключение типа System::Exception - которое является частью .NET, но пишете & в опереторе catch. Тут нужно либо так:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    try{
        board[e->ColumnIndex,e->RowIndex]->Value = board[e->ColumnIndex,e->RowIndex]->Value->ToString()->ToUpper();
    }
    catch(Exception e){} //! <<<<<< Без &
     
    }

Либо так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    try{
        board[e->ColumnIndex,e->RowIndex]->Value = board[e->ColumnIndex,e->RowIndex]->Value->ToString()->ToUpper();
    }
    catch(std::exception& e){}
     
    }


Добавлено
Вот на википедии про С++ CLI(про который вы тут вопросы задаете) -> https://ru.wikipedia.org/wiki/C%2B%2B/CLI
А вот на той же самой википедии статья про С++ -> https://ru.wikipedia.org/wiki/C%2B%2B на котором вы якобы пытаетесь писать.
Только получается у вас наоборот почему то.

Если вы специально используете С++ CLI(например учительница вас заставила на нем писать), так значит и читать литературу нужно по этому языку, а не по С++.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)