2011-01-31 12 views
4

내가 한 [표준 : : char_traits이 = _Traits으로]에 대한 일치하는 항목이 없습니다 : 나는 그것을 사용하는 '<< 연산자'표준의 :: 연산자 << 문자열 변환 연산자 클래스는 foobar

#include <string> 

class Foobar 
{ 
public: 
    Foobar(); 
    Foobar(const Foobar&); 
    ~Foobar(); 

    operator std::string() const; 
}; 

을 시도 이 같은 :

#include <iostream> 
#include <sstream> 
#include "Foobar.hpp" 

int main() 
{ 
    Foobar fb; 
    std::stringstream ss; 

    ss << "Foobar is: " << fb; // Error occurs here 

    std::cout << ss.str(); 
} 

내가 명시 적으로 운영자는 foobar에 대한 < <를 작성해야합니까

// C++ 소스 파일? FooBar가 iostream에 배치되기 전에 문자열로 변환되고 std :: string에 이미 연산자 < <이 정의되어 있기 때문에 필요한 이유가 표시되지 않습니다.

왜이 오류가 발생합니까?. 내가 뭘 놓치고 있니?

[편집]을

난 그냥이, ​​나는이 선을 변경 한 경우 오류가 발생하는 것을 발견 : 그것은 성공적으로 컴파일

ss << "Foobar is: " << fb.operator std::string(); 

. 어 ...! 왜 컴파일러가 자동 변환을 할 수 없습니까 (Foobar -> string)?

위의 구문을 사용하지 않아도되는 '최상의 방법'은 무엇입니까?

+0

http://stackoverflow.com/q/6677072/560648? –

답변

6

Foobar fb는 스트림에 배치되기 전에 문자열로 변환되지 않습니다. < < 연산자에 대한 인수는 문자열이어야합니다.

당신은 문자열을 수동으로

ss << "Foobar is: " << std::string(fb); 

로 변환 또는는 foobar에 대한 운영자 < <을 정의해야 하나. 운영자 < < 정의

갈 수있는 현명한 방법이 될 것입니다, 당신은 당신의 운영자 < < 코드에서 문자열 변환을 호출 할 수없는 이유가 없습니다.

관련 문제