2013-02-17 3 views
3

머리가 폭발 할 것입니다. 나는 '< <'연산자에 두 클래스 (punto 및 벡터)로 오버로드하려고 잘못했다는 것을 이해할 수 없습니다. 다음 코드는 코드는 클래스에서 클래스 헤더 파일에 기록되어 있습니다 :<< 중복 된 심볼 연결 오류로 인해 오버로드 됨

std::ostream& operator << (ostream& salida, const punto& origen) 
    { 
     // Se escriben los campos separados por el signo 
     salida << "Punto --> x: " << origen.xf << " , y: " << origen.yf; 
     return salida; 
    } 

    std::ostream& operator << (ostream& salida, const vector& origen) 
    { 
     // Se escriben los campos separados por el signo 
     salida << "Punto --> x: " << origen.p1.xf << " , y: " << origen.p1.yf; 
      return salida; 
    } 

오류는 연결 단계에서 진행하고 그것은 매우 간단한 예제이기 때문에 클래스 헤더에는 이중 링크가 없습니다.

enter image description here

+3

해당 코드를 헤더에 넣지 마십시오. 헤더에 선언을 넣고 구현은 하나의 .cpp 파일에만 넣습니다. – Mat

+0

예제가 너무 단순하다면, 아마도 전체를 우리에게 제시하는 것을 꺼리지 않을 것입니다. –

+0

관련 없음 : 스크린 샷을 찍지 않아도 콘솔의 출력물을 복사하여 붙여 넣을 수 있습니다. –

답변

6

이 특정 오류는 함수는 두 개의 서로 다른 번역 단위로 컴파일됩니다 것을 의미합니다. 이것은 함수 정의를 헤더에 넣고 두 개의 다른 소스 파일에 포함시키는 경우에 가장 많이 일어납니다.

  1. 선언은 정의하지, 헤더에 함수 :

    당신은 크게 두 가지 솔루션, 말하기,있다. 소스 파일에 정의 (구현)하십시오.

  2. 함수를 정적 또는 인라인으로 선언하십시오.
+0

해답을 설명 해주셔서 감사드립니다. 정말 바보 같은 오류. –