尝试重载模板类友元<<运算符时出错

Errors trying to overload template class friend << operator

本文关键字:lt 出错 运算符 友元 重载      更新时间:2023-10-16

尝试编写更好版本的数组类型时,我遇到了一个问题。由于某种原因,声明不起作用。它给我抛出了一堆奇怪的错误。尝试查找问题,但到目前为止没有找到任何东西。这是代码:

Template <class T>
class SafeArray {
private:
    int size;
    int elements;
    int index;
    T* arr;
public:
    SafeArray(int n);
    ~SafeArray();
    void push_back(T item);
    void resize(int size);
    friend std::ostream& operator << (std::ostream& os, const SafeArray<T>& ar)

};

以及类外的实现:

template<class T>
std::ostream& operator << <T> (std::ostream& os, const SafeArray<T> & arr) {
    for (int i = 0; i < arr.elements; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    return os;
}

如果你想要朋友模板,friend声明应该是

template <class T>
class SafeArray {
    ...
    template<class X>
    friend std::ostream& operator << (std::ostream& os, const SafeArray<X>& ar);
};

实现应该是

template<class T>
std::ostream& operator << (std::ostream& os, const SafeArray<T> & arr) {
    ...
}

BTW:在operator<<的实施中,我认为std::cout << arr[i] << " ";应该std::cout << arr.arr[i] << " ";