2017-04-22 1 views
-2

쌍 배열로 작업 할 때 "subscript는 배열 또는 포인터 유형이 필요합니다"오류가 계속 발생합니다. 비슷한 문제가있는 다른 모든 스레드를 살펴 보았지만 해결할 수 없었습니다.쌍의 동적 크기 배열 : 초당 설정 값

동적으로 선언 된 쌍 배열 쌍 * m_Array; 배열 크기를 으로 설정합니다. m_Array = 새 쌍 [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가"_을 좋아하지 않습니다. –

답변

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를 사용하십시오 (또는 전혀 사용하지 마십시오). 이런 도구에 의존하는 것은 완벽하지 않기 때문에 좋지 않은 생각입니다. –