0

メソッドだけの 1 つのヘッダー ファイル、それらのメソッドが実装されている 2 つ目の C++ ファイル、2 つ目の C++ ファイルからメソッドを呼び出す 3 つ目のメイン ファイルがあります。

エラーが発生する行をコメントで示しました。

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列挙値が 1 か所で複数定義されているように見えるため、値へのフル パスを使用する必要があります: ::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 に答える