2012-11-29 3 views
0

제 컴파일러는 다음과 같은 방법으로 불만을 지정된 형태에 대한 참조 인으로 다른 후보 :일치 기능 없음 (생성자)에 전화,

Matrix.cpp:58: error: no matching function for call to ‘List::miterator::miterator(List::miterator)’ 
List.h:99: note: candidates are: List::miterator::miterator(List::miterator&) 
List.h:98: note:     List::miterator::miterator(List::Node*, Dim) 
List.h:97: note:     List::miterator::miterator(Dim) 

나는 목록에서 상속 클래스 목록 및 클래스 매트릭스가 . 클래스 miterator는 List 클래스 내에 놓입니다. 라인 58 말한다

miterator i(nula(ROW)); 

및 내부에 배치되어

Matrix Matrix::operator*(const Matrix& right) const 

매트릭스가 희소하고 목록 이차원 링이다. method nula는 주어진 차원의 첫 번째 경계 센티넬에서 반복자를 반환합니다. 치수는 다음과 같이 전 세계적으로 정의된다 : 목록의

typedef enum { ROW, COL } Dim; 
Dim operator!(Dim dim) { return dim == COL ? ROW : COL; } 

노드가 목록 내에서 정의되며, 다음과 같은 필드가 있습니다

private: 
    unsigned index[2]; 
    T num; 
public: 
    Node *next[2]; 

내가 어떤 도움을 주셔서 감사합니다 것, 내가 잘못 무엇인지 전혀 모른다. 저는 초보자 인 C++ 프로그래머입니다. 미리 감사드립니다.

편집 : 도움이 될 수도 있습니다. miterator 정의의 내부에서 :

miterator(Dim dir) { direction_flag = dir; } 
    miterator(Node *n, Dim dir) { node = n; memory = n; direction_flag = dir; } 
    miterator(miterator &i) { node = i.node; memory = i.memory; direction_flag = i.direction_flag; } 
    ~miterator() {} 
    inline bool operator==(const miterator& i) const { return node == i.node; } 
    inline bool operator!=(const miterator& i) const { return node != i.node; } 
    inline miterator& operator=(const miterator i) { node = i.node; memory = i.memory; return *this; } 

답변

1
List::miterator::miterator(List::miterator&) 

List::miterator::miterator(List::miterator const&) 

임시 (귀하의 경우 nula(ROW))는 비 const 기준에 결합 할 수 있어야한다. 생성자를 변경하거나 (권장) 임시로 사용하지 마십시오.

nula n(ROW); 
miterator i(n); 
+0

나는 그 원칙에 대해 완전히 잊어 버렸습니다. 정말 고마워요! –