2014-02-17 4 views
2

CArray 개체가있는 클래스가 있는데이 CArray에서 다른 클래스로 값을 가져와야하지만 지금까지이 작업을 수행하지 못했습니다.CArray 포인터에서 값 액세스

class CTempGridClass: public CTableCtrl { 
public: 
    CArray<CArray<float,float>, CArray<float,float>&> *m_row2; 
}; 

class CCorePassageAreasPage : public CDialog { 
    DECLARE_DYNCREATE(CCorePassageAreasPage) 
public: 
    enum { IDD = IDD_CORE_PASSAGE_AREA }; 
    CArray<CArray<float,float>, CArray<float,float>&> m_row; 
    CTempGridClass Grid; 
}; 

BOOL CCorePassageAreasPage::OnSetActive() { 
    Grid.m_row2 = &m_row; 
} 
내가 m_row2 값에 액세스 할 수있는 방법을

? 시도 했음

그러나 이것은 초기화 중입니다 : 'CArray'에서 'float'로 변환 할 수 없습니다. "오류가 발생합니다. 어떤 위의 오류없이 m_row에 위의 할당을 할 수 있습니다.

대신 벡터를 사용하여이 문제를 피할 수 있지만 'CCorePassageAreasPage'는 다른 사람이 작성한 것으로 변경하고 싶지 않습니다.

+2

대해'X = m_row2-> 연산자 [] (nrow를) [j]'? –

답변

2

m_row2은 포인터입니다. 따라서 m_row2[nRow]은 배열을 가리키는 경우 CArray의 배열 nRow을 나타냅니다. 아마도 (아마도) 하나의 객체만을 가리키고 있기 때문에 잘못된 메모리에 액세스하기 만합니다.

거의 확실하게 포인터가되고 싶지는 않습니다. 클래스에 "가지고있다"고 했으므로 불필요한 간접 참조가없는 멤버 여야합니다.

당신이 어떤 이유로 포인터를 원하는 경우에, 당신은 그것에서 가리키는 배열에 액세스하는 역 참조해야합니다 :

float x = (*m_row2)[nRow][j];