2017-11-15 3 views
0

숙제 프로그램의 구문에 문제가 있습니다. 프롬프트가 제대로 프로그램 조각 실행할 수있는 방법에 삽입 과부하하는 것입니다 그래서구조체 벡터에 <<을 오버로드하는 방법

for (int i = 0; i < v.size(); ++i) cout << v[i] << endl; cout << endl;

을, 이것은 내가 지금까지 가지고있는,하지만 난 여전히 COUT에 오류가 < < V [I] 문 (바이너리 표현에 잘못된 피연산자) :

unsigned int seed; 
    struct node 
    { 
     int integer; 
     double value; 
    }; 

    double random(unsigned int &seed); 
    void initialize_vector(vector<node> &v); 
    template<typename T> 
    void print_vector(const vector<T> &v); 
    template<typename T> 
    ostream &operator <<(ostream &out, const vector<T> &v); 
    template<typename T> 
    void output(ostream &out, const vector<T> &v); 

    int main() 
    { 
     vector<node> v(10); 

     initialize_vector(v); 
     print_vector(v); 

     return 0; 
    } 

    double random(unsigned int &seed) 
    { 
     const int MODULUS = 15749; 
     const int MULTIPLIER = 69069; 
     const int INCREMENT = 1; 

     seed = ((MULTIPLIER * seed) + INCREMENT) % MODULUS; 

     return double(seed)/double(MODULUS); 
    } 

    void initialize_vector(vector<node> &v) 
    { 
     for (int i = 0; i < v.size(); ++i) 
     { 
      v[i].integer = int (11 * random(seed)); 
      v[i].value = double (11 * random(seed)); 
     } 
    } 

    template<typename T> 
    void print_vector(const vector<T> &v) 
    { 
     for (int i = 0; i < v.size(); ++i) 
      cout << v[i] << endl; 
     cout << endl; 
    } 

    template<typename T> 
    ostream &operator <<(ostream &out, const vector<T> &v) 
    { 
     output(out, v); 
     return (out); 
    } 

    template<typename T> 
    void output(ostream &out, const vector<T> &v) 
    { 
     cout << v.integer; 
     cout << setprecision(2) << fixed << setw(6) << v.value; 
    } 

내가 지금 다시와 마지막 3 개 기능에 대한 const를 참조하지 않고 통과와 함께 대신 T의 노드를 통과 해봤 내 구문을 가정 void 출력 함수에서 어떻게 든 잘못된 것입니다. 올바른 방향으로 도움이나 의견을 주시면 감사하겠습니다.

* 참고 : ostream & 운영자 기능을 변경할 수 없습니다. V 노드의 벡터 인 경우

+3

에 대한 운영자 < < 과부하 하나 더 기능이 필요합니다. "ostream 및 연산자 기능을 변경할 수 없습니까?"라는 의미는 무엇입니까? 나는 당신이'operator << (ostream &, foo)'함수를 의미한다고 가정하니? _all_ 벡터에 대해 이미 변경/추가했습니다. 왜 당신은'const 노드 '를 전문으로 할 수 없습니까? –

+1

노드는'ostream & operator << (ostream & out, const node & n);' –

+0

@ Dúthomhas를 필요로합니다. 교수님이 저에게 제공 한 것이기 때문에 함수 안에있는 것을 바꿀 수 없습니다 .' const 노드 '를 전문으로 할 때, 'template '을 사용할 필요가 없을까요? 그리고 @Aluan은 다른 함수가 될까요, 아니면 원래의'operator <<'함수를 수정하겠습니까? – minty59

답변

2
cout << v[i] << endl; 

는, 당신은 어떻게 출력`node` 종류는 컴퓨터를 말한 적이없는 노드

ostream &operator <<(ostream &out, const node &n) 
{ 
    out << n.interger << " " << n.value; 
    return out; 
} 
관련 문제