0

我有一个只是方法的头文件,一个实现这些方法的第二个 C++ 文件,以及我想从第二个 C++ 文件调用方法的第三个主文件。

我已经显示了注释出现在哪些行上。

Root.h文件(只是方法):

class Root
{
    //File
    public: void NewFile(void);
    public: void OpenFile(void);
    public: void SaveFile(void);
    public: void SaveAsFile(void);
    public: void Print(void);
    public: void Exit(void);

    //Edit
    public: void Undo(void);
    public: void Redo(void);
    public: void Cut(void);
    public: void Copy(void);
    public: void Paste(void);
    public: void SelectAll(void);

    //Tools
    public: void Options(void);

    //Help
    public: void About(void);
};

根.cpp

#include "stdafx.h"
#include "Root.h"

using namespace System::Windows::Forms;
using namespace System::IO;

class Nroot : public Root
{
    void OpenFile()
    {
        OpenFileDialog^ opf = gcnew OpenFileDialog();
        opf->InitialDirectory = "C://";
        opf->Filter = "Text Files|*.txt";
        if(opf->ShowDialog() == DialogResult::OK) //here is first error C3063: operator '==':  all operands must have the same enumeration type 
        {
            StreamReader^ sr = gcnew StreamReader(opf->FileName);
            MessageBox::Show(sr->ReadToEnd());
        }
    }
};

主文件(只是事件)

private: System::Void openToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    Nroot nr;
    nr.OpenFile; //here is second error C3867: 'WindowsFormsApplication2::Nroot::OpenFile': function call missing argument list; use '&WindowsFormsApplication2::Nroot::OpenFile' to create a pointer to member c:\users\srdjan\documents\visual studio 2012\projects\windowsformsapplication2\windowsformsapplication2\Form1.h 325
}
4

1 回答 1

0
  1. 看起来DialogResult::OK枚举值的定义不同,然后在一个地方,所以你必须使用值的完整路径:::System::Windows::Forms::DialogResult::OK。至少 MSDN 示例是这样做的

    if(opf->ShowDialog() == ::System::Windows::Forms::DialogResult::OK)
    
  2. 你忘记了括号:

    nr.OpenFile();
               ^^
    
  3. Nroot::OpenFile()在课堂外访问,您应该将其设为public. 在c++中,私有访问修饰符默认应用于成员:

    class Nroot : public Root
    {
    public:
        void OpenFile()
    //...
    
于 2013-01-20T19:24:17.487 回答