2017-04-22 14 views
-2

ペアの配列を扱うときに、「添字には配列またはポインタ型が必要です」というエラーが発生し続けます。私は同様の問題を持つ他のすべてのスレッドを見てきましたが、解決できませんでした。ペアの動的サイズ配列:1番目と2番目の設定値

私は ペア* m_Arrayのようなペアの配列を動的に宣言しました。 配列のサイズを に設定します。m_Array = new pair [c];

ここで私がしていないのは、配列のインデックスのペアの1番目と2番目にアクセスすることです。私はこのようなことをしようとするとエラーになります。

for (int i = 0; i < m_Size; i++) { 
    m_Array->first[i] = rhs.m_Array->first[i]; 
    m_Array->second[i] = rhs.m_Array->second[i]; 
} 

それはより多くの次のコードのようにする必要がありますようにそれは直感的に思えるが、私のIDEは私がm_Array[i]

for (int i = 0; i < m_Size; i++) { 
    m_Array[i]->first = rhs.m_Array[i]->first; 
    m_Array[i]->second = rhs.m_Array[i]->second; 
} 

を持つようにしない任意の助けをありがとう!

+0

詳細については、「私のIDEは「_」が好きではありません。 –

答えて

1

あなたはほぼそこにいます。

m_Arrayがいくつかのペアのポインタである場合は、m_Array[0]が最初のペアです。 m_Array[0].firstはその最初のペアの「最初の」メンバーです。

購読[i]がすでに(つまり、m_Array[i]手段*(m_Array + i)である)あなたのために逆参照しているとして、デリファレンスメンバーアクセス演算子->のための必要はありません。したがって、通常のメンバーアクセスオペレータ.が必要です。

ので:

for (int i = 0; i < m_Size; i++) { 
    m_Array[i].first = rhs.m_Array[i].first; 
    m_Array[i].second = rhs.m_Array[i].second; 
} 

それとも、このすべてのトラブルをスキップして、ちょうど書くことができます:

for (int i = 0; i < m_Size; i++) { 
    m_Array[i] = rhs.m_Array[i]; 
} 

するか、あなたが持っている、素敵なstd::vectornew、配列からそれもスキップして変化する可能性がありそれはあなたのためにすべての仕事を行います。

+0

ありがとうございました!私がこれまでに行っていなかったのは、 'm_Array [i]。 'と入力するとメンバーがいなく、オートコンプリートオプションがないからです。私はVisual Studioを使用しているので、一般的にオートコンプリートオプションがない場合は、それは良いことではありません。 – Grehgous

+0

@Grehgous:まず脳を使うべきです、Intellisense/autocomplete second(またはまったくありません)。このようなツールに依存することは、完璧ではないので、悪い考えです –

関連する問題