4

同じプロジェクトに関する以前の質問: onetwo。それらを読む必要はありません。Visual C++ プロジェクトでネイティブ C++ SDK を使用しようとしていることを知っておいてください。これは私が最初に考えていたよりもはるかに複雑ですが、マネージ コードを使用したネイティブ C++ プロジェクトの拡張に関するこの Web サイトは、すでに私を大いに助けてくれました。

最後のリンクの指示に従って、フォームをネイティブ C++ プロジェクトに追加しました。これにより、プロジェクトが自動的に CLR プロジェクトに変換されました。MainForm.cppただし、 and Interface.cpp(ネイティブ C++ コードが MainForm を作成および表示できるようにするファイル)のみが/clrフラグ付きでコンパイルされます。他のファイルはネイティブのままです。

私が今抱えている問題は、Visual Studio が で使用されている CLR のものを認識していないように見えることですMainForm.h。そのため、次の行で:

using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

単語Systemには常に赤の下線が引かれ、それに応じたエラーが表示されます。

error C2653: 'System' is not a class or a namespace name

それらの行ごとに。

gcnewまた、 CLR 内で問題なく動作するはずの単語やその他のものも認識しません。

誰が私が間違っているのか教えてもらえますか? 私の推測では、それは非常に小さなものだと思います。変更するのを忘れたフラグ、参照の欠落、または同様のものですが、それが何であるかわかりません。

4

1 に答える 1

4

MainForm.h直接的または間接的にどこに含めますか?
に含める場合はMainForm.hInterface.h含める場所に間接的に含めることになりますInterface.h。つまり、Interface.hでコンパイルされていない翻訳単位 (つまり、*.cpp) にインクルードすると、 とは標準 C++ の一部ではないため、/clrコンパイラはもちろんそれについて文句を言います。namespace Systemgcnew

したがって、 にMainForm.hのみ含めて、Interface.cppで前方宣言を使用する必要がありますInterface.h

于 2013-04-02T12:05:23.147 に答える