动态大小的数组对:第一个/第二个设置值

问题描述:

当使用一组数组时,我总是收到错误“下标需要数组或指针类型”。我查看了所有其他类似问题的线程,但一直无法解决它。动态大小的数组对:第一个/第二个设置值

我动态地声明了一个对数组,它看起来像 pair * m_Array; 并设置数组大小为 m_Array = new pair [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

请更具体关于_“我的IDE不喜欢”_。 –

你快到了。

如果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,则有它为你做所有的工作。

+0

谢谢!之前我没有这样做的原因是因为当我输入'm_Array [i] .'时,它表示没有成员可用,并且没有自动完成选项。我使用Visual Studio,所以通常如果没有自动完成选项,这意味着它不好。 – Grehgous

+0

@Grehgous:您应该首先使用智能,智能感知/自动完成第二(或根本不使用)。依赖于这样的工具是一个坏主意,因为它们并不完美 –