1

Visual Studio 2010 Professional で C++/CLI (Visual C++) プロジェクトを作成しました。次に、非常に小さな C++ クラスをプロジェクトに追加しました。以下はコードです

#include <stdafx.h>
#include <iostream>

using namespace std;

    class Tester
    {

    public:
        Tester(){};

        void show()
        {
            cout << "OKOK..Printing" << endl;
        }

    };

ここで、自動作成された GUI フォームにボタンをドラッグ アンド ドロップし、ボタンから上記のコードを呼び出そうとしています。以下はボタンのコードです。

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                 Tester ^t = gcnew Tester();
                             //Test t; - giving errors as well

             }
    };

コードを実行すると、次のエラーが表示されます

1>------ Build started: Project: testdamn, Configuration: Debug Win32 ------
1>Build started 7/1/2013 12:59:38 PM.
1>InitializeBuildStatus:
1>  Touching "Debug\testdamn.unsuccessfulbuild".
1>GenerateTargetFrameworkMonikerAttribute:
1>Skipping target "GenerateTargetFrameworkMonikerAttribute" because all output files are up-to-date with respect to the input files.
1>ClCompile:
1>  All outputs are up-to-date.
1>  Test.cpp
1>  testdamn.cpp
1>c:\users\yohan\documents\visual studio 2010\projects\testdamn\testdamn\Form1.h(79): error C2065: 'Tester' : undeclared identifier
1>c:\users\yohan\documents\visual studio 2010\projects\testdamn\testdamn\Form1.h(79): error C2065: 't' : undeclared identifier
1>c:\users\yohan\documents\visual studio 2010\projects\testdamn\testdamn\Form1.h(79): error C2061: syntax error : identifier 'Tester'
1>  Generating Code...
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:01.86
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

ボタンからクラス呼び出しを削除すると、プログラムが正常にビルドされることにも気付きました。では、これらの C++ クラスを C++/CLI から呼び出すにはどうすればよいでしょうか?

4

1 に答える 1

5

表示されるコンパイラ エラーを確認します。

1>c:\...\testdamn\Form1.h(79): error C2065: 'Tester' : undeclared identifier
1>c:\...\testdamn\Form1.h(79): error C2065: 't' : undeclared identifier
1>c:\...\testdamn\Form1.h(79): error C2061: syntax error : identifier 'Tester'

コンパイラは、指定されたクラスが見つからないTesterため使用できないことを通知しています。

クラスを使用するTesterには、その定義を含むヘッダー ファイルを Form クラスの定義を含むファイルに含める必要があります。iostreamこれは、を使用するためにヘッダーを含める必要があった方法と同じですstd::cout

しかし、これを修正すると、別の問題が発生します。アンマネージクラスであるgcnewをインスタンス化しようとしています。マネージドクラスをインスタンス化することを目的としており、マネージド ヒープからメモリを割り当てます。通常の C++ 演算子を使用して、通常のC++ アンマネージ クラスをインスタンス化します。コンパイラがクラスの定義を確認できるようになると、この不一致に気づき、別のエラーが生成されます。TestergcnewnewTester

于 2013-07-01T07:35:50.257 に答える