我有两个实例,我重载了 << 运算符,它始终默认为下面显示的第一个实例。有什么方法可以让自定义类 Shape 识别第二个函数?
谢谢,
约翰
第一次重载:
template <class T>
ostream & operator << (ostream & out, vector <T> & vec)
{
for (unsigned int i = 0;i<vec.size()-1; i++) {
out << vec[i] << " ";
}
out << vec[vec.size() - 1];
return out;
}
第二次重载:
ostream & operator << (ostream & out, vector <Shape> & vec)
{
for (unsigned int i = 0;i<vec.size(); i++)
{
out << "##" << vec[i].get_shape_type << i << endl << vec[i] << endl;
}
return out;
}
2012 年 7 月 25 日编辑:
我添加了放在同一个文件中
#ifndef _UTILS_H_
#define _UTILS_H_
#include <iostream>
#include <vector>
#include <algorithm>
#include "Shape.H"
using namespace std;
template <class T>
ostream & operator << (ostream & out, vector <T> & vec)
{
for (unsigned int i = 0;i<vec.size()-1; i++) {
out << vec[i] << " ";
}
out << vec[vec.size() - 1];
return out;
}
template <class Shape>
ostream & operator << (ostream & out, vector <Shape> & vec)
{
for (unsigned int i = 0;i<vec.size(); i++)
{
out << "## " <<vec[i];
}
return out;
}
#endif
并试图编译,我得到了这个错误
../include/utils.H:22:11:错误:重新定义'模板 std::ostream& operator<<(std::ostream&, std::vector&)' ../include/utils.H:11:11 : 错误: 'template std::ostream& operator<<(std::ostream&, std::vector&)' 之前在这里声明