перегрузка ostream для любой функции, которая возвращает вектор - PullRequest
1 голос
/ 24 октября 2010

Привет, предположим, что у меня есть класс A:

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;
 }
};

и кое-где еще я перегружен ostream от 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;
}

когда я пытаюсь

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

но когда я делаю

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

Я понимаю, что что-то не так с перегрузкой ostream или мне может понадобиться другая техника перегрузки, может кто-нибудь помочь мне с этим? Заранее спасибо

1 Ответ

7 голосов
/ 24 октября 2010

Ваша перегрузка operator<< принимает неконстантную ссылку. Ваша A<T>::get_v() функция возвращает std::vector<T> по значению; этот возвращаемый объект является временным. Неконстантная ссылка не может привязываться к временному объекту.

Ваша перегрузка должна принимать константу (const std::vector<T>&).

...