我有兩個實例,其中我重載了< <操作符,它始終默認顯示在下面的第一個是否有任何方法可以獲得第二個自定義類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;
}
編輯7/25/2012:
我加放在t他同一個文件
#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的&操作< < (標準:: ostream的&,性病::矢量&) ' ../include/utils.H:11:11:錯誤:' 模板的std :: ostream的&操作者< <(標準:: ostream的&,性病::矢量&)'此前在此處聲明
[模板專精](https://www.google.ca/search?hl=zh-CN&biw=1920&bih=947&noj=1&gbv=2&sclient=psy-ab&q=template+specialization&oq=template+specialization&gs_l=serp.3..0l10 .10010.12203.0.12507.8.6.0.2.2.0.120.460.5j1.6.0 ... 0.0.SsvzcUdFvpA)。 – chris 2012-07-24 16:23:30
如果您註釋掉模板版本,它是否可以編譯?我懷疑在呼叫點只有模板版本可見。 – 2012-07-24 17:08:30
只要在使用之前聲明第二次重載,就應該有效。你能發佈一個可以展示問題的可編譯程序嗎? – 2012-07-24 17:17:12