2017-03-29 4 views
-1

2 차원 매트릭스 템플릿 클래스 unsing std vectors를 만들려고 노력했습니다. 지금까지는 대부분의 훌륭한 기능들이 exepted으로 작동합니다. 하지만 접근 자나 getter 및 setter 함수를 작성하려고하면 몇 가지 문제가 발생합니다. 이 내 클래스의 기본 레이아웃 처음 :표준 벡터 템플릿 매트릭스

template <class T> 
class DynamicMatrix 
{ 
private: 
    vector<vector<T>> map; 
... 
} 

내 첫 번째 시도가 있었다 접근 기능 :

template <class T> 
T& DynamicMatrix<T>::at(size_t x, size_t y) 
{ 
    return(map.at(x).at(y)); 
} 
template <class T> 
const T& DynamicMatrix<T>::at(size_t x, size_t y) const 
{ 
    return(map.at(x).at(y)); 
} 

하지만 gameMap.at (X, Y)를 호출 할 때 = objxy; 컴파일러는 삭제 된 함수를 말한다.

그래서 getter와 setter를 시도하고 값을 할당하려고 할 때 같은 결과가 나타납니다.

+0

먼저 멤버 변수'map'을 호출하지 마십시오. 이미'std :: map' 클래스가 있으며,'map'을 사용하면 혼란이 야기됩니다. 둘째, [mcve]하시기 바랍니다. – PaulMcKenzie

+0

내 생각 엔 버그는'objxy'에 있지만, mvce는 없다고 ... –

+0

그런데, 가능한 경우 벡터의 벡터를 피하십시오. 단일 벡터는 필요한 데이터를 쉽게 보유 할 수 있으며 훨씬 효율적이고 캐시 친화적입니다. –

답변

0

은 사용자의 gameMap에 있지만 언급하지 않았지만 접근 가능한 복사 생성자가 없으므로 할당하면 objxy이 실패합니다.

+0

정말 고맙습니다. "objxy"에는 복사 생성자가 없었고 배열에 배열이 있기 때문에 완전히 쓰는 것을 잊어 버렸습니다 (기본 agan : D를 배워야하는 것처럼 보입니다). 복사 생성자와 연산자를 작성한 후에 = 오류가 사라졌습니다. – Mazzelfassel