2013-11-03 5 views
1

는 I이 연산자 오버로딩이라 메인 클래스의 컴파일러 에러를조작 << 오류

no match for 'operator<<' in 'std::cout << VertexPriority(2, 4u)' 

를 얻을 수 있지만, 오류가 어디 있는지 알아 보았 없다.

여기에 연산자 오버로드 선이 있으며 클래스 정의 안에 구현했습니다.

std::ostream& operator<<(std::ostream& out) const { return out << "Vertex: " << this->vertex << ", Priority: " << this->priority; } 

정점 및 우선 순위는 정수이고 unsigner 정수입니다.

는 메인 클래스에서 나는이 일을하려고 해요 :

std::cout << VertexPriority(2, 3) << std::endl; 
+0

당신은 그런 식으로 삽입 연산자를 정의하지 않습니다

자세한 도움말이 튜토리얼을 읽어 *아니*). 일반적인 연산자 오버로딩 [이 답변] (http://stackoverflow.com/questions/4421706/operator-overloading-in-c/4421719#4421719) 섹션을 참조하십시오. – WhozCraig

+0

어떻게 정의해야합니까? – giacomotb

+0

이전 메모 [** 여기를 클릭 **]에서 링크 된 문서보기 (http://stackoverflow.com/questions/4421706/operator-overloading-in-c/4421719#4421719) – WhozCraig

답변

2

이처럼 정의 : VertexPriority::vertex 또는 VertexPriority::priority 공개하지 않은 경우

class VertexPriority { 
    ... 

    friend std::ostream& operator<< (std::ostream& out, const VertexPriority& vp); 
}; 

std::ostream& operator<< (std::ostream& out, const VertexPriority& vp) { 
    return out << "Vertex: " << vp.vertex << ", Priority: " << vp.priority; 
} 

friend 키워드가 필요합니다. 내가이 모든하지만-보장 할 수있는 (개체에있는 ostream에 삽입하는 의도하지 않는 한, http://www.learncpp.com/cpp-tutorial/93-overloading-the-io-operators/

+0

괜찮 았으나 이제는 오류가 발생합니다. is [linker error] 연산자'(std :: ostream &, VertexPriority &) '에 대한 정의되지 않은 참조입니다. 포인터 (vp-> 우선 순위)를 사용하지 않기 때문에 코드가 약간 변경되었으므로 이미 구현되어 있습니다. getter (vp.getVertex) – giacomotb

+0

업데이트 된 답변보기. ('-'대신'.'을 사용하십시오.) –

+0

수정 이유는 모르겠지만 함수 선언에서 VertexPriority 전에 'const'를 삭제했습니다. – giacomotb