-3

Visual C++ 2010 でプログラミングしています。example.h example.cpp と Form1.h があります。基本的に、私はコードのビットを貼り付けました。Form1.h を example.h ファイルに含めることができません。理由はわかりません。しかし、主な問題は、example.cpp から Test (form1.h にある) を呼び出す方法です。構文はどうなりますか?これを行うことは可能ですか?

My Form1.h

#include "example.h" 
public ref class Form1 : public System::Windows::Forms::Form
{
    public: void Test(void)
    {
              // Does something
    }
}

私のexample.cpp

#include "example.h"
#include "Form1.h"

Test();    // would like to call Test from here. 
4

1 に答える 1

1

ここには 2 つの問題があります。

  1. 別の関数内から関数を呼び出す必要があります。グローバル スコープで関数example.cppを呼び出そうとしているため、現在ファイルにあるコードは無効です。Test()

    代わりに次のようにします。

    int main()
    {
        Test();
    
        return 0;
    }
    

    mainこれにより、C++ アプリケーションへのエントリ ポイントとなる関数がないという問題も解決されます。

    より一般的には、Visual Studio に付属しているプロジェクト テンプレートの 1 つを使用して開始することを強くお勧めします (あなたが言ったようにランダムなコードをコピーして貼り付けるのではなく)。これにより、エントリーポイントなど、開始するために必要なものがすべて揃っていることが保証されます。しっかりとした土台ができたら、そこから構築を開始できます。

    また、C++/CLI に関する書籍やオンライン チュートリアル ( Hello C++/CLI, Part 1Hello C++/CLI, Part 2など)を入手すると便利な場合もあります。

  2. 関数Testはクラスのメンバー関数ですForm1。つまり、呼び出すにはそのクラスのオブジェクトが必要です。したがって、コードは実際には次のようになります。

    int main()
    {
        Form1^ frm = gcnew Form1();
        frm.Test();
    
        return 0;
    }
    

    Test()または、関数を関数にすることで、これを回避できstaticます。これにより、クラスのインスタンスがなくても呼び出すことができます。

    public ref class Form1 : public System::Windows::Forms::Form
    {
        public: static void Test(void)
        {
            // Does something
        }
    }
    
    // ...
    
    int main()
    {
        Form1::Test();
    
        return 0;
    }
    

    ただし、これは、関数内のクラスの他のメンバーにアクセスできないことを意味することに注意してください(ポインターがないため)。Form1Test()this

    これは、C++/CLI を学習するために使用することを決定した書籍/チュートリアルですべて説明されている必要があります。「クラス」または「オブジェクト指向設計」に関する章を検索してください。

于 2013-08-02T07:30:29.327 に答える