我正在学习 C++,我学习了函数模板——为了训练,我编写了以下程序(SortArray 函数按升序对结果数组的元素进行排序)。尝试执行时,它会给出错误 C2760(程序无法编译)。你可以解释吗?(请详细说明,如果我在解释中不清楚,那么我会在进一步研究的过程中弄清楚)。
#include <iostream>
using std::cout;
using std::cin;
template <typename t> void SortArray(t a[], const __int8 LENGTH)
{
__int8 ielem;
t elem;
for (__int8 n = 0; n < LENGTH; n++)
{
for (__int8 n1 = n; n1 < LENGTH; n1++)
if (a[n1] < a[ielem]) || (n1 == n) ielem = n1;
elem = a[n];
a[n] = a[ielem];
a[ielem] = elem;
}
}
int main()
{
const __int8 A_SIZE = 10, B_SIZE = 5;
float a[A_SIZE];
int b[B_SIZE];
setlocale(LC_ALL, "Ru");
cout << "Введите элементы первого массива через пробел или через Enter:\n";
for (__int8 i = 0; i < B_SIZE; i++)
cin >> b[i];
SortArray<int>(b, B_SIZE);
cout << "Отсортированный по возрастанию массив:\n";
for (__int8 n = 0; n < B_SIZE; n++)
cout << b[n] << " ";
cout << "\n";
cout << "Введите элементы второго массива через пробел или через Enter:\n";
for (__int8 n = 0; n < A_SIZE; n++)
cin >> a[n];
SortArray<float>(a, A_SIZE);
cout << "Отсортированный по возрастанию массив:\n";
for (__int8 n = 0; n < A_SIZE; n++)
cout << a[n] << " ";
cout << "\n";
system("pause");
}
首先,您忘记了条件周围的括号
if- 不是一个
接下来,您将使用未初始化的变量
ielem。在第一次检查a[n1] < a[ielem]时,它与什么相比a[n1]?用什么元素?这就是编译(语法)的问题。至于语义——你的程序做什么——从这个意义上说,我没有看它..
顺便说一句,一个字节对于数组的大小还不够吗?
然而 - 如果你打算将它用于声明的数组,就像你一样
main- 那么我建议你这样做:(那么一切都和你的一样) - 然后编译器将推断出数组本身的长度。