#include <iostream> #include <algorithm> using namespace std; const int size=10; template<typename T> class Array { public: Array() {} T sum() { T s = 0; for (int i = 0; i < size; i++) { s += data[i];} return s; } void sort() {int i,j; for(i=0;i<size-1;i++) for(j=0;j<size-1-i;j++) if(data[j+1]<data[j]) { T temp=data[j+1]; data[j+1]=data[j]; data[j]=temp; } } void print() { for (int i = 0; i < size; ++i) {cout << data[i] << " "; } cout << endl; } T& operator[](int index) { return data[index]; } const T& operator[](int index) const { return data[index]; } T data[size]; }; int main() { Array<int,10> arr={1, 5, 3, 4, 8, 6, 9, 0,2,7}; cout << "Sum= " << arr.sum() <<endl; cout << "排序前: "; arr.print(); arr.sort(); cout << "排序后: "; arr.print(); return 0;}检查并修改代码
时间: 2024-01-13 13:02:56 浏览: 63
在你的代码中,你定义了一个接收一个模板参数的模板类 `Array`。但是在 `main` 函数中,你使用了两个模板参数来实例化 `Array` 类。这就导致了编译错误。
要解决这个问题,你可以将 `Array` 类的定义中的 `<typename T>` 改为 `<int>`,因为你在 `main` 函数中使用的是 `int` 类型。另外,在定义数组 `arr` 时,你可以把尖括号中的 `10` 删掉,因为 `size` 已经被定义为 `10` 了。
修改后的代码如下:
```c++
#include <iostream>
#include <algorithm>
using namespace std;
const int size = 10;
template<int N>
class Array
{
public:
Array() {}
int sum()
{
int s = 0;
for (int i = 0; i < N; i++)
{
s += data[i];
}
return s;
}
void sort()
{
int i, j;
for (i = 0; i < N - 1; i++)
for (j = 0; j < N - 1 - i; j++)
if (data[j + 1] < data[j])
{
int temp = data[j + 1];
data[j + 1] = data[j];
data[j] = temp;
}
}
void print()
{
for (int i = 0; i < N; ++i)
{
cout << data[i] << " ";
}
cout << endl;
}
int& operator[](int index)
{
return data[index];
}
const int& operator[](int index) const
{
return data[index];
}
int data[N];
};
int main()
{
Array<size> arr = { 1, 5, 3, 4, 8, 6, 9, 0, 2, 7 };
cout << "Sum= " << arr.sum() << endl;
cout << "排序前: ";
arr.print();
arr.sort();
cout << "排序后: ";
arr.print();
return 0;
}
```
这样就可以解决编译错误了。
阅读全文