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 *为 aString^以将其放入您的 UI 中。

String类有一个构造函数,它接受一个(char*char* is SByte* in C#)。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 回答