【发布时间】:2020-07-20 12:25:05
【问题描述】:
我编写了一个简单的运算符重载函数,如果我在类中定义它(块注释),它工作正常,但如果在类外定义,则会出错。知道错在哪里吗?
#include<iostream>
using namespace std;
template<class T>
class vector{
int d;
public:
vector(){
d = 0;
}
vector(T data){
d = data;
}
friend void operator << (vector &v, T data);
/*{
cout << data << endl;
}*/
};
template<class T>
void operator << (vector<T> &v, T data){
cout << data;
}
int main(){
vector<int> v1;
v1 << 10;
return 0;
}
【问题讨论】:
-
可能编译器无法区分
std::vector和你的vector类? -
using namespace std;— 不要这样做。即使不太可能,<iostream>也可以包含<vector>。 -
您遇到什么错误?请edit您的问题具体。我收到了警告、通知和未定义的引用。 ideone.com/cXFacq如果你仔细阅读它们,你可能会发现哪里出了问题。
-
Why is “using namespace std;” considered bad practice? 它很快就会用
vector这样的名字咬你。不要使用它。
标签: c++ class templates operator-overloading friend-function