0

私はC++が初めてです。C++ でプログラムを作成しようとしていますが、 を使用するとエラーが発生しますe.what()。を含めまし#include <exception>たが、取得しerror C2664 - Cannot convert parameter 1 from const char* to system::string ^ます。

これがコードです。

#pragma once
#include <iostream>
#include <fstream>
#include <exception>
#include <string>

namespace SilverthorneTechnologiesSchoolDashboard {

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace std;

//Form parameters

#pragma endregion
private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
        ifstream codeFile;
        try{
            codeFile.open("userDetails.info");
        }
        catch (exception &e)
        {
            label1->Text = e.what();
        }
         }
 };
}
4

2 に答える 2

2

codeFileアンマネージコードであり、アンマネージ例外をスローするため、例外を適切にキャッチしています。を に変換しconst char *String^UI に配置するだけです。

Stringクラスには、 char*(char* は C# では SByte* です)を取るコンストラクターがあります。label1->Text = gcnew String(e.what()); あなたの問題を解決するはずです。

つまり、マネージ ストリーム オブジェクトを使用できます。これにより、アンマネージドではなくマネージド例外が提供され、残りのマネージド コードとの相互運用性が向上します。FileStreamを見て、それがニーズを満たしているかどうかを確認してください。

于 2013-01-17T18:45:05.870 に答える
-1

これは少し推測ですが、変更してみてください

catch (exception &e)

catch (exception& e)
于 2013-01-17T18:45:15.700 に答える