2010-10-23 17 views
1

Salut suppose que je classe A:surcharge ostream pour toute fonction qui retourne un vecteur

using namespace std; 
template <class T> 
class A{ 
private: 
vector<T> my_V; 
public: 
// assume initializations etc are done 
inline vector<T> get_v() 
{ 
    return my_v; 
} 
}; 

et certains autres où j'ai surchargé ostream de std :: vector

template <class T> 
ostream & operator<<(ostream& out, vector<T> &vec) 
{ 
    CUI size=vec.size(); 
    for (int i = 0; i < size; i++) 
     out << vec.at(i) << " "; 
    if(size>0)out << endl; 
    return out; 
} 

lorsque je tente à

A<int> obj; 
cout<<obj.get_v; // gives soo many errors 

mais quand je fais

A<int> obj; 
vector<int> v= obj.get_v; 
cout<<v; // it works fine 

Je comprends que quelque chose ne va pas avec la surcharge d'ostream ou je pourrais avoir besoin d'une autre technique de surcharge pour quelqu'un qui pourrait m'aider avec ça? Merci d'avance

Répondre

7

Votre surcharge operator<< prend une référence non-const. Votre fonction A<T>::get_v() renvoie un std::vector<T> par valeur; cet objet retourné est un temporaire. Une référence non-const ne peut pas être liée à un objet temporaire. Votre surcharge doit prendre une référence constante (const std::vector<T>&).

+0

c'est parfait merci beaucoup! –

+0

En plus de ce que dit James, pour les deux exemples, il serait utile que vous appeliez la fonction. Vous faites juste référence à cela. Votre surcharge est pour un vecteur, pas pour une fonction renvoyant un vecteur. Cheers & hth., –

+0

@Alf: Ah, bonne prise. –