【发布时间】:2011-04-30 04:21:47
【问题描述】:
我在为模板类定义一些运算符重载时遇到了一些问题。让我们以这个假设的类为例。
template <class T>
class MyClass {
// ...
};
-
操作员+=
// In MyClass.h MyClass<T>& operator+=(const MyClass<T>& classObj); // In MyClass.cpp template <class T> MyClass<T>& MyClass<T>::operator+=(const MyClass<T>& classObj) { // ... return *this; }导致此编译器错误:
no match for 'operator+=' in 'classObj2 += classObj1' -
运营商
// In MyClass.h friend std::ostream& operator<<(std::ostream& out, const MyClass<T>& classObj); // In MyClass.cpp template <class T> std::ostream& operator<<(std::ostream& out, const MyClass<T>& classObj) { // ... return out; }导致此编译器警告:
friend declaration 'std::ostream& operator<<(std::ostream&, const MyClass<T>&)' declares a non-template function
我在这里做错了什么?
【问题讨论】:
-
你能发布一些无法编译的真实代码吗?
-
@Naveen:你可以在box.net/shared/v23rj2f8e7获得压缩版本
标签: c++ templates operator-overloading