2013-04-07 3 views
0

클래스의 일부를 string에 오버로드하려고하는데 오버로드가 작동하지 않습니다. 또는 long long 오버로드가 있습니다. 그러나 string 대신 long long을 제외하고 동일하게 가정합니다.간단한 = 연산자 오버로드

class FileData 
{ 
public: 
    string extensions_;     
    unsigned long long containsBytes_;  
}; 

string& operator = (string& s , FileData& fd) 
{ 
    s= fd.extensions_; 
    return s; 
} 

string extName = fileVector[0]; 

나는 계속 오류가 발생합니다 : 'operator ='는 멤버 함수 여야합니다. 또한 istream을 사용해 보았지만 작동하지 않았습니다.

아무도 내가이 문제에 대해 어떻게 알 수 있습니까?

+1

오류 메시지가 충분히 명확하지 않습니까? –

+0

(명시 적) 변환 연산자 또는 함수가 작동합니다. 'std :: string'에 함수를 추가하여 클래스를 할당 (또는 복사 - 생성, 수행하려는 작업)하도록 할 수 없습니다. – chris

답변

4

이 클래스에서 문자열에 할당 할 수 있도록, 당신은 변환 연산자이 필요합니다 할당 연산자를 클래스의 멤버로 사용하여 에 해당 클래스의 객체를 할당합니다.

+0

감사합니다. – Protonblast

3

std :: string의 연산자 =를 오버로드 할 수 없습니다.

class FileData 
{ 
public: 

    // Conversion to string 
    operator string() const {return extensions_;} 

    string extensions_;     
    unsigned long long containsBytes_;  
}; 

당신 만 오버로드 할 수 있습니다 당신이 아마 원하는 것은 캐스트 연산자 :

class FileData 
    { 
    public: 
     string extensions_; 
     unsigned long long containsBytes_; 

     operator string() 
     { 
      return extensions_; 
     } 
    }