c++ 我不明白为什么编译器显示此“错误:未在此范围中声明“i””

jgwigjjp  于 2023-01-10  发布在  其他
关注(0)|答案(2)|浏览(229)

我尝试使用类模板打印数组的元素,但在名为array的类构造函数中显示如下错误:

In constructor 'Array<T>::Array(T*, int)':
./6cf77951-ab9d-463e-86aa-763810936e52.cpp:20:18: error: 'i' was not declared in this scope
      cout<<*(ptr+i)<<" ";

我希望它打印每个for循环迭代的数组元素

#include <iostream>
using namespace std;

template <typename T> class Array {
private:
    T* ptr;
    int size;

public:
    Array(T arr[], int s);
    void print();
};

template <typename T> Array<T>::Array(T arr[], int s)
{
    ptr = new T[s];
    size = s;
    for (int i = 0; i < size; i++)
        ptr[i] = arr[i];
         cout<<*(ptr+i)<<" ";
}

template <typename T> void Array<T>::print()
{
    for (int i = 0; i < size; i++)
        cout << " " << *(ptr + i);
    cout << endl;
}

int main()
{
    int arr[5] = { 1, 2, 3, 4, 5 };
    Array<int> a(arr, 5);
    a.print();
    return 0;
}
kt06eoxx

kt06eoxx1#

容易犯的错误

for (int i = 0; i < size; i++)
     ptr[i] = arr[i];
     cout<<*(ptr+i)<<" ";

应该是

for (int i = 0; i < size; i++)
{
     ptr[i] = arr[i];
     cout<<*(ptr+i)<<" ";
}
qni6mghb

qni6mghb2#

在定义了i的循环中,只有一行“ptr[i] = arr[i];“。下一行“cout〈〈*(ptr+i)〈〈”;“不再是循环体的一部分,因此对i一无所知。对于多行,您需要使用大括号。

相关问题