2010-10-23 63 views
1

嗨任何函数重载ostream的假设,我有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; 
} 
}; 

和一些别的地方我已经超负荷的std :: ostream的矢量

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重载有问题,或者我可能需要其他重载技术,有人可以帮我一下吗?在此先感谢

回答

7

您的operator<<重载需要一个非const引用。您的A<T>::get_v()函数按值返回std::vector<T>;这个返回的对象是一个临时的。非const引用不能绑定到临时对象。

你的超载需要一个const引用(const std::vector<T>&)。

+0

这是完美的感谢很多人! – 2010-10-23 23:51:07

+0

除了詹姆斯所说的两个例子之外,如果你调用这个函数,它会有所帮助。你只是指它。你的超载是一个向量,而不是一个返回向量的函数。干杯&hth。, – 2010-10-23 23:58:57

+0

@Alf:啊,很好。 – 2010-10-24 02:23:12