2011-06-17 12 views
0

私のプロジェクトには3つのクラスがあります(ABCという名前です)。 Aは要約です。
AB
Bの基底クラスがCC++/CLIの奇妙な継承の問題

の基底クラスであり、Cの内側に、私は変数vector<A*> member_vector;を宣言している:彼らは、次のような関係を持っています。これは、次のような問題を引き起こしている:

C3699:'*':タイプ'A'
C4368にこの間接を使用することはできません:管理'C'のメンバーとして'member_vector'を定義することはできません:混合型がサポートされていません。

このエラーが発生している原因はありますか?私は循環クラスの使用に問題があるかもしれないと思いますが、どのように克服できますか?

+1

コードを記述するのではなく、代表的な例を投稿するだけです。サイクリッククラスの使用はどこですか? –

+1

C++/CLIエラーのように、ここで何か他のことが起こっていることは間違いありません。あなたのプロジェクトのコードと詳細を投稿してください。 –

+0

あなたは重要な詳細を残しました。あなたは '/ clr'でコンパイルしており、3つのクラスは_managed_タイプです。 – ildjarn

答えて

6

問題は、ネイティブタイプstd::vectorを.NET Framework管理クラスの中でC++/CLIで使用しようとしていることです。 C++ .NETが分からない場合、C++/CLIは推奨されません。

+0

あなたの意見は分かりません。私はVisual C++を使用しています。そして、私はすでに他のプログラムでstd :: vectorを使っていますが、うまくいきました。 – jpnavarini

+0

@jpnavarini:Visual C++はコンパイラであり、言語ではありません。あなたが使用している_language_は 'std :: vector <> 'を使用できるC++/CLIですが、使用しようとしているコンテキストでは使用できません。おそらくC++を使用したいと思うかもしれません。 – ildjarn

+0

@ildjarn他のクラスにあるクラスのベクトルを作成する必要がありますが、これはC++/CLIで可能ですか?また、私は既に他のC++/CLIプロジェクトでこのようなことをしていると思います。 – jpnavarini

2

あなたには2つの問題が発生しています。 1つは、管理クラス(C4368)であるクラスのネイティブタイプを使用していることです。さらに、これが管理されている場合は、「*」の代わりに「^」を使用する必要があります(C3699)。

+0

"^"変更が有効でしたか?しかし、なぜ???あなたは私をより良く説明できますか? – jpnavarini

+0

@jpnavarini:C++/CLIではなく、まったく異なる言語を使用しています。 C++を使用する場合は、 'Win32'プロジェクトテンプレートの1つである 'CLR'プロジェクトテンプレートの1つを使用します。 – ildjarn

+0

@ildjarnはそれを正しくしました。非常に似ていますが、C++/CLIはC++ではなく、「*」も同じ方法で使用されていません。 – bradenb