2011-12-03 4 views
1

이것은 C++ 프로그램 스 니펫입니다. 다음은 오버로드 된 연산자 = 기호입니다. main 메소드에서 stringstream 타입의 배열을 만들고 그 배열의 내용을 비교하고 싶습니다.operator = error에 일치하는 내용이 없습니다.

* .cpp 파일 :

template class Assessment3<stringstream>; 

template <class T> Assessment3<T> & Assessment3<T>:: operator=(const Assessment3<T>& refer){ 
    if(this != &refer){ 
     for(int x = 0; x < size; x++){ 
      this->array[x]= refer.array[x]; 
     } 
    } 
    return *this; 

} 

헤더 파일 :

#include <string> 

using namespace std; 

#ifndef ASSESSMENT3_HPP 
#define ASSESSMENT3_HPP 

template <class T> class Assessment3 { 
    friend ostream& operator<< (ostream& os, const Assessment3<T>& assess){// overloads << operator 
     os << assess.calls << assess.swaps << assess.array; 
    return os; } 
public: 
    Assessment3(); 
    Assessment3(const Assessment3& orig); 
    ~Assessment3(); 
    bool bubbleSort(T * array, int size, int & calls, int & swaps); 
    void addition(T * array, int size); 
    void copy(const Assessment3 &orig); 
    Assessment3 & operator=(Assessment3<T> & other); // overloaded = sign 
    bool operator == (Assessment3<T> assess) const; 
    bool operator > (Assessment3<T> assess); 
    bool operator < (Assessment3<T> assess); 
    Assessment3<T> & operator=(const Assessment3<T> & refer); // overloaded = sign 

private: 
    T * array; 
    int calls; 
    int swaps; 
    int size; 
}; 

#endif /* ASSESSMENT3_HPP */ 

홈페이지 방법 :

g++ -c -g -MMD -MP -MF build/Debug/Cygwin-Windows/Run.o.d -o build/Debug/Cygwin-Windows/Run.o Run.cpp 
Run.cpp: In function `int main(int, char**)': 
Run.cpp:65: error: no match for 'operator=' in '*((+(((unsigned int)i) * 188u)) + array) = value' 
/usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/iosfwd:84: note: candidates are: std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >& std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >::operator=(const std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&) 
make[2]: *** [build/Debug/Cygwin-Windows/Run.o] Error 1 
make[1]: *** [.build-conf] Error 2 
make: *** [.build-impl] Error 2 
make[2]: Leaving directory `/cygdrive/g/Aristotelis/C++/assessment3' 
make[1]: Leaving directory `/cygdrive/g/Aristotelis/C++/assessment3' 

BUILD FAILED (exit value 2, total time: 3s) 
:

Assessment3 <stringstream> defaultObject; 

stringstream * array = new stringstream[4]; 
    stringstream so; 
    int i = 0; 
    string value=""; 
    for(char x = 'a'; x < 'e'; x++){ 
     so << x + "Bill Gates";   
     so >> value; 
     array[i] = value; 
     i++; 
    } 
    defaultObject.addition(array, 4); 

그것은 다음과 같은 오류가 발생합니다

내 코드에서 무엇이 잘못 되었습니까?

답변

1

이 문제는 Assessment3과 관련이 없습니다. array[i] = value;array[i] << value;으로 변경하십시오.

1

std::stringstd::stringstream에 할당 할 수 없습니다.

array[i] = value; //line 65 right? 

stringstream * array = new stringstream[4]; //same thing as you wrote 
int i = 0; 
for(char x = 'a'; x < 'e'; x++, i++){ 
    array[i] << x << "Bill Gates"; 
} 
관련 문제