在使用数组对时,我不断收到错误“下标需要数组或指针类型”。我已经查看了所有其他类似问题的线程,但一直无法解决它。
我动态声明了一对看起来像对的数组:
pair<T, int> *m_Array;
使用以下命令设置数组大小:
m_Array = new pair<T, int>[c];
现在我未能做的是在数组的索引中访问对中的第一个和第二个。当我尝试做这样的事情时,我收到错误。
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 :(得分: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];
}
或者您也可以跳过这一点并从new
和数组更改为一个不错的std::vector
,然后让它为您完成所有工作。