无法从其他类调用方法?

Can't call a method from other classes?

本文关键字:调用 方法 其他      更新时间:2023-10-16

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

我已经用注释说明了哪些行出现了错误。

Root.h file (just methods):

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);
};

Root.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());
        }
    }
};

主文件 (just event)

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:userssrdjandocumentsvisual studio 2012projectswindowsformsapplication2windowsformsapplication2Form1.h 325
}
  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()
    //...