2009-07-01 10 views
1

1次元データ配列.1次元配列値をクラステンプレートに設定しました。クラステンプレート++/CLI

void function(Array2d<double> &x,array< double>^ input,int width,int,height) 
{ 


double temp; 
temp1=0; 

double temp2; 

int i,j; 

// assign input array values to two dimensional array 
for(i=0;i<width;i++) 
for(j=0;j<height;j++) 
{ 
{ temp2=input[temp1]; 
    x.setvalue(i,j,temp2); 
    temp1=temp1+1; 
} 
} 

} 

Array2D<double>A(3,3); 

私は関数にそれを送った::

function(A,input,3,3); 

そして、私はArray2D値を印刷しようとした:

double temp; 
for(i=0;i<3;i++) 
for(j=0;j<3;j++) 
{ 
{temp=A.getValue(i,j) 

Console:Write("{0}",temp);}} 

私はCLRでこのapplicaitonを実行し、私は3x3のクラステンプレートを宣言されたすべてのVisual Studio 2008でアプリケーションが動作しましたが、このコードを実装したいWindowsフォームアプリケーション、それはフォームアプリケーションにこのようなエラーが発生しました:

error C2065: 'Array2D' : undeclared identifier 
error C2065: 'A' : undeclared identifier 

は、どのように私はこのエラーを克服できるか、どこでクラステンプレートを見つける必要がありますか?

最高のお礼...

+0

こんにちは。あなたが投稿したコードは、実際にあなたが私たちにあなたに手伝ってくれる問題に関連していません。私たちは、あなたがやっているものや、Array2Dを使う場所のような、あなたがやっていることや、少なくともそれに関連する部分について、winformsのコードを見る必要があります。あなたはそれを含めることができますか? – Skurmedel

+0

コードを正しくインデントすることもできますか? ;) – Partial

答えて

0

コードの名前空間を確認してください。多くの場合、あるプロジェクトから別のプロジェクトにクラスを移動すると、名前空間を変更することが忘れられます。このようなエラーが発生します。あなたのコードが原因宣言されていない型にコンパイルされませんときを探すために

1

もの:

  • はI(あなたのケースでは、Array2Dを含む1)#include D関連のヘッダがありますか?そうでない場合、コンパイラは型の定義を知らず、宣言されていないと考えます。
  • コードは、壊れたコードと同じ名前空間に型を定義していますか?そうでない場合は、修飾名(::、たとえばstd::vectorなど)を使用してタイプを参照していますか?そうでない場合は、usingを使用して名前空間全体を利用できるようにしましたか?
  • 私は#define dをヘッダー内の他のものに使用しようとしていますが、クライアントコードではないか、またはその逆の記号ですか?これはあなたの問題ではないかもしれませんが、ウインドウズ開発で時々起こる可能性があります。多くのWin32関数にはASCIIとUnicodeのバージョンがあり、ヘッダファイルには#defineが設定されています。 Win32の関数名を無意識に隠してしまった場合、特に不愉快です。関数はSendMessageとなります。

あなたのヘッダーが不足している可能性があります。IDEによって自動的に生成されたコードがあります。あなたが利益の多くはさえに、標準ライブラリのコンテナを使用することにあり、余談として
~Array2D() { delete [] data; }

0

この行は、未定義の動作が生成されます管理されたC++。たとえば、タイプTの2D配列は、std :: vector < std :: vector < T>>のようなものです。メモリ管理や行+列の計算が正しいことを確認する必要はありません。ネイティブC++としてコードをコンパイルする必要がない場合は、必要に応じて.NETコンテナを使用します。

0

を必要とするので、あなたがnew []でデータを割り当てられた
~Array2D() { delete data; }