2011-01-03 4 views
2

私は1つのクラスを作成しましたが、これをベクターで使用する必要があります。エラーC3698: 'CreerLevel :: Mur ^':使用不可能な型の引数 'de nouveau'を使用しています

ref class Mur 
{ 
public: 
int debutX, debutY; 
int finX, finY; 
Mur(){} 
Mur(int debutX, int debutY) { 
    this->debutX = debutX; 
    this->debutY = debutY; 
    finX = 0; 
    finY = 0; 
} 
~Mur() 
    { 
    } 
int getX() { return debutX; } 
int getY() { return debutY; } 

bool estFinit() { 
    return (finX==0); 
} 

void finir(int x, int y){ 
    finX = x; 
    finY = y; 
} 
}; 
} 

私はそれを

std::vector<Mur^> vMurs; 
... 
    vMurs.push_back(gcnew Mur(i,j)); 

エラーを使用しようと52行でファイルに来る「xmemory」が、私は、このファイルのxDに

+0

を使用してみてください。代わりに 'array 'を使用してください。 –

+4

ローカライズされた開発ツールを使用することを強くお勧めします。英語でそれらを使用するということは、誤った翻訳や悪い翻訳を扱う必要がなく、問題に遭遇した場合に検索エンジンを通じて多くの助けを得ることができるということです(今のような)。 –

答えて

0

を知らない私は、アレクサンドル・C.に同意する場合ベクトルを使用する場合は、STL/CLR(http://msdn.microsoft.com/en-us/library/bb385954.aspx)ベクターを使用できます。

+0

ありがとう!配列を使用する... – clavat

1

管理対象オブジェクトをアンマネージクラスに格納しようとしているため、コンパイラがオブジェクト化しています。うまくいかない場合、ガベージコレクタはオブジェクト参照を見つけてゴミを適切に収集できる必要があります。また、管理されていないオブジェクトを見つけることができないため、管理参照も検索できません。

私はSTL/CLRを使用しないことを強く推奨しますが、STLのすべての短所をCLRの欠点と結びつけています。実際には、ベクトル<> gcroot <>を使用して問題を解決できます。しかし、System :: Collections :: Generic :: List <を使用することは、はるかに良い解決策です。

using namespace System::Collections::Generic; 
... 
    List<Mur^>^ vMurs = gcnew List<Mur^>; 
... 
    vMurs->Add(gcnew Mur(i, j)); 
+0

名前空間(System :: Collectionsも一緒に名前空間を使用していなくても)がクラッシュするので、 'using namespace System :: Collections :: Generic'には多くの問題がありました。この優れたソリューションで問題が発生した場合は、 'Namespace System :: Collections'を使用し、ジェネリックコレクションを明示的に修飾することを忘れないでください(例えば、' Generic :: List ^vMurs = gcnew Generic :: List ') –

0

私はあなたが(管理対象外)ベクターで管理ハンドルを使用することを許可されているとは思わない

std::vector<gcroot<Mur ^> > vMurs; 
... 
vMurs.push_back(gcnew Mur(i,j)); 
+0

I正当な理由がない場合、管理対象タイプと非管理対象タイプを混在させたくありません。 –

+0

@Alexandre C .: std :: vectorはすでにアンマネージタイプなので、すでに混在しています。 – mmmmmmmm

+0

私は 'gcroot'が必要ない場合は好きではありません。むしろ 'List ^'を使用したいと思います。あなたはvMurをマネージクラスの中に入れることはできません。 –

関連する問題