嗨,假设我有 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::vector 的 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 重载有问题,或者我可能需要其他重载技术,有人可以帮我解决这个问题吗?提前致谢
最佳答案
你的 operator<<
重载采用非常量引用。你的A<T>::get_v()
函数返回 std::vector<T>
按值(value);这个返回的对象是临时的。非常量引用不能绑定(bind)到临时对象。
您的重载需要采用常量引用 ( const std::vector<T>&
)。
关于c++ - 为任何返回 vector 的函数重载 ostream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4006603/