2017-01-21 1 views
1

この質問にはすでに質問がありましたが、私が見た他の回答は私には分かりませんでした。別のタイプのオブジェクトの2Dマトリックスを構築するために使用したいクラスがあります。私は、新しいオブジェクトを作成するメソッドを記述しようとしている、新しいオブジェクトに2Dベクトルのポインタを割り当てるが、私は正しい構文を取得することはできません。(C++)同じオブジェクト型へのポインタの2Dベクトルに新しいオブジェクトをインスタンス化して割り当てるための構文?

std::vector<std::vector<CSinusoid*>> *m_SineMatrix; //2D Vector of pointers to CSinusoid objects 

をそして私はこれらの線に沿ってメソッドを作成しよう:

は、私はこのような2次元ベクトルを作成する私はどこ

void CWaveMatrix::Init_SineMatrix(int x, int y) 
{ 
    m_SineMatrix[x][y] = new CSinusoid(); 
} 

関数内のコードの行がありますトラブルがあります。私は、2Dベクトルの特定のポインタに新しいオブジェクトを指すように指示する方法を知らない。

ベクトルとメソッドの両方が同じクラスのプライベートメンバーであることに注意してください。

答えて

1

機能内のコード行が問題を起こしています。私は、2Dベクトルの特定のポインタに新しいオブジェクトを指すように指示する方法を知らない。

あなたのコードはすでにこれを行います。 new演算子は新しいオブジェクトを作成し、直ちにベクトルをそのオブジェクトにポイントします。

サイドポイントとして、ポインターのベクトルがある理由はありますか?ベクタはすでにヒープ上に割り当てられているので、ベクタにプレーンなオブジェクトを置き、そのようにアクセスするだけでよいでしょう。将来のトラブルにつながる可能性は低いです。

+0

申し訳ありませんが、私がいくつかの重要な情報を逃したようです。 Visual Studioの内部では、問題のコード行の中の '='記号に赤で下線が引かれています。赤い線の上にカーソルを置くと、 "no operator" = "これらのオペランドに一致します"というメッセージが表示されます。通常、赤で下線が引かれているものは何かが正しくないことを示しています - 私の構文に何も間違いはないのですか? 私はポインタのベクトルを持っています。なぜなら、あなたがちょうど私に言ったことを知らなかったからです。よかった! – fmwavesrgr8

+0

ああ、m_SineMatrix自体がポインタであることに気付かなかった! '(* m_SineMatrix)[i] [j] =新しいCSinusoid()を試してください。 – PrestonH

2

私はあなたの問題は、実際にここにあると思う:

std::vector<std::vector<CSinusoid*>> *m_SineMatrix 

m_SineMatrixがCSinusoidポインタの2Dベクトルではありません...それは、このようなベクターへのポインタです。そして、C++ []演算子はベクトルだけでなく生ポインタに対しても働きます。そのため、関数内のコードは、ポインタの[x]演算子を呼び出し、その結果を2Dベクトルとして扱い、2Dベクトルの[y]演算子を呼び出し、その結果を1次元ベクトルとして扱います。それはCSinusoid *をCSinusoid *のベクトルに割り当てる方法を知らないので、それは文句を言う。

これを修正するには、* m_SineMatrixをm_SineMatrixに変更するか、関数をdo(* m_SineMatrix)[x] [y]に変更します。

0

オーケー編集 - それは私がこれを持っていた本当の問題は、実際にはベクトルのベクトルであるとき、私は不当、文字通りオブジェクト型のグリッドであるとして、2Dベクトルをvizualizedということです判明しますオブジェクトの。この場合、 'vectorName [0] [0] ='はオブジェクトに直接アクセスし、vectorName [0] = 'はオブジェクトのベクトルにアクセスするため、本質的に私のコードは' thisType = thatType ' 'thisType = thisType'と言ってください。それは、ブールが浮動小数点に等しい、あるいはそのようなものであると言うようなものでしょう。これは赤い下線の '='記号を説明するでしょう。

以下は作業溶液ました:

std::vector<CSinusoid> vTemp; //Create a vector of object<type> 
CSinusoid Sine; //Create an object of same type 

for (int i = 0; i < x; i++) 
{ 
    vTemp.push_back(Sine); //Add copies of the object to new vector //A vector of vectors of objects 
std::vector<std::vector<CSinusoid>> m_SineMatrix; 
} 

for (int i = 0; i < y; i++) 
{ 
    m_SineMatrix.push_back(vTemp); //Add copies of that vector to 2D member vector of objects 
} 
関連する問題