重载流提取运算符定义

img

#include <iostream>
using namespace std;
template<class T>
class Array
{
public:
    int n;
    T *p;
    friend ostream& operator <<(ostream& output,Array& a);
    Array(int t):n(t)
    {
        p=new T[t];
        cout<<"分配"<<t<<"个数组元素"<<endl;
    }
    ~Array()
    {
        if(p) delete[]p;
        cout<<"释放数组"<<endl;
    }
    T& operator[](int i)
    {
        return *(p+i);
    }
};
template<typename T>
void mysort(Array<T>&A,int n)
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n-i-1;j++)
        {
            if(A[j]>A[j+1])
            {
                int middle;
                middle=A[j];
                A[j]=A[j+1];
                A[j+1]=middle;
            }
        }
    }
}
template<typename T>
ostream& operator <<(ostream& output, Array& a)
{
    output<<a<<endl;
    return output;
}
int main()
{
    int n;
    cin >> n;
    Array<int> a(n);
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    mysort(a, n); 
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
    return 0;
}

定义流提取运算符时系统报错:Array is not a type

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    针对问题:报错说“Array不是一个类型”,可能是因为代码中定义的Array与C++中的数组类型相同,导致产生冲突。解决方法是将类名更改为一个不同的名称,例如将Array改为MyArray。更改后代码如下:

    include

    include

    include

    using namespace std;

    class MyArray { private: int p; int n; public: MyArray() {} MyArray(int a,int b) { p = a; n = b; } friend void operator ++(MyArray& arr) { int i = 0; while (i < arr.n) { (arr.p + i) += 1; i++; } } friend void operator ++(MyArray& arr,int n) { int i = 0; while (i < arr.n) { (arr.p + i) += 1; i++; } } friend void operator --(MyArray& arr) { int i = 0; while (i < arr.n) { (arr.p + i) -= 1; i++; } } friend void operator --(MyArray& arr,int n) { int i = 0; while (i < arr.n) { (arr.p + i) -= 1; i++; } } void print() { for (int i = 0; i < n; i++) cout << setw(4) << *(p + i); cout << endl; } };

    int main() { int a[7],i=0; for (i = 0; i < 7; i++) { cin >> a[i];

    }
    
    MyArray  arr(a, i);
    arr.print();
    arr++;
    arr.print();
    arr.print();
    arr.print();
    
    arr++;
    arr.print();
    
    arr--;
    arr.print();
    arr.print();
    arr.print();
    --arr;
    arr.print();
    

    }


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^