重载运算符>类模板中的好友
Overloaded operator> friend in class template
我试图在模板的类中拥有一个超载的操作员>朋友函数。该超载运算符的目的是确定左数组是否大于右数组,而不论类型如何。我想要沿arrayint> arrayfloat的线条返回布尔值。但是,在定义朋友函数后,我会出现一个错误,告诉我我有一个未申报的标识符。我在Mac上使用Xcode。知道我如何在使用朋友超载函数时如何解决此问题?
array.h
#ifndef Array_h
#define Array_h
#include <iostream>
template <class T> class Array;
template <class T, class S>
bool operator> (const Array<T>& arr1, const Array<S>& arr2);
template <class T>
class Array {
private:
int arraySize;
T * array;
public:
Array() : arraySize(0), array(nullptr){};
Array(int);
~Array();
int getSize(){return this->arraySize;}
void printArray();
//error here, "S is an undeclared identifier"
friend bool operator> (const Array<T>& arr1, const Array<S>& arr2) {
return (arr1.arraySize > arr2.arraySize);
}
};
template <class T>
Array<T>::Array(int size) {
this->arraySize = (size > 0 ? size : 0);
this->array = new T [this->arraySize];
for(int i=0; i<this->arraySize; i++) {
this->array[i] = 0;
}
}
template <class T>
Array<T>::~Array() {
delete [] this->array;
}
template <class T>
void Array<T>::printArray() {
for(int i=0; i<this->arraySize; i++) {
std::cout << this->array[i] << std::endl;
}
}
#endif /* Array_h */
main.cpp
#include "Array.h"
int main(int argc, char ** argv) {
Array<int> arrayInt(5);
Array<float> arrayFloat(10);
std::cout << "Number of elements in integer array: " << arrayInt.getSize()
<< std::endl;
std::cout << "Values in integer array:" << std::endl;
arrayInt.printArray();
std::cout << "Number of elements in float array: " << arrayFloat.getSize()
<< std::endl;
std::cout << "Values in float array:" << std::endl;
arrayFloat.printArray();
bool isGreater = arrayInt > arrayFloat;
std::cout << isGreater;
return 0;
}
朋友声明不匹配函数模板,它也必须是模板:
template<typename TT, typename TS> friend bool
operator >(const Array<TT>& arr1, const Array<TS>& arr2) {
return (arr1.arraySize > arr2.arraySize);
}
实际上,没有必要成为朋友,在外面定义它,然后致电getSize()
:
template<typename T, typename S> bool
operator >(const Array<T>& arr1, const Array<S>& arr2) {
return (arr1.getSize() > arr2.getSize());
}
相关文章:
- 为什么比较运算符如此快速
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 消除好友和成员二进制运算符的歧义
- C++:不能使运算符<<成为模板嵌套类的好友
- 好友与成员运算符重载的优先级
- 与好友运算符接口<<:为什么不能链接?
- 重载运算符>类模板中的好友
- 运算符<<不能使用其好友数组的 IT 成员
- C++:制作模板运算符 = 重载好友
- 运算符覆盖 - 何时使用好友
- C++模板好友运算符与附加模板参数
- 重载运算符<<用于模板类.即使使用好友关键字也无法获得私人会员
- 使用好友和成员函数的运算符重载
- 如何使用好友运算符存储字符串
- 类内好友运算符似乎不参与重载解析
- 为什么我不能在"好友"运算符中使用"私人"字段?
- 将cout重载为非好友助手运算符
- 好友运算符<<过载问题,