Visual c + + Windows窗体中的C2227和C3867错误

时间:2018-05-30 07:44:05

标签: visual-c++ c++-cli windows-forms-designer

我正在尝试在我的应用程序中读取一个文件,并且弹出一些我不完全理解的错误。

  

C2227:' - > Equals'的左边必须指向class / struct / union / generic   type C3867:'System :: String:ToString':非标准语法;使用'&'至   创建指向成员的指针

以下是代码:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    OpenFileDialog^ open = gcnew OpenFileDialog();

    open->InitialDirectory = "c:\\";
    open->Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
    open->FilterIndex = 2;
    open->RestoreDirectory = true;

    if (open->ShowDialog->Equals(System::Windows::Forms::DialogResult::OK) )
    {
        textBox1->Text = open->FileName;
    }
}
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
    ifstream inFile;

    string time;
    string name;
    Shack shackPref;
    pair<int, int> av;
    string filename = textBox1->Text->ToString;

    inFile.open(filename);

    if (inFile.is_open()) {
        cout << "File has been opened" << endl;
    }
    else {
        cout << "NO FILE OPENED" << endl;
    }

    while (!inFile.eof()) {

    }

有人可以解释为什么open-&gt; ShowDialog不属于class / struct / union / generic类型?如何重新排列以使其成为正确的输入?我是否需要创建一个包含该数据的结构,如果是这样,' - &gt; Equals'仍然可以将它与DialogResult进行比较吗?

同样的问题是尝试将文件名转换为字符串^中的std:string。当我尝试将Text视为textBox1的成员时,它表示它没有该成员。为什么不' - &gt; ToString'将'Text'识别为成员?

提前感谢您的帮助。我仍然是c ++的新手,所以这对我来说是一个真正的大脑。

1 个答案:

答案 0 :(得分:0)

您尝试像属性或成员一样使用ShowDialog,但它是一种方法,因此需要使用括号进行调用。

open->ShowDialog()

ToString同样如此。它需要被调用,因为它是一个功能。

textBox1->Text.ToString();

但是,在String上调用ToString()是没有意义的。您应该能够使用此问题的答案将.net字符串转换为std :: string。

C++ .NET convert System::String to std::string