问题是数组的声明。
我们可以评论
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <vector>
#include <list>
template <typename Type, size_t const SIZE>
class dummy_array {
Type data[SIZE] = {};
public:
dummy_array(){}
~dummy_array(){}
Type& operator[](size_t const index)
{
if (index < SIZE)
return data[index];
throw std::out_of_range("index out of range");
}
Type const& operator[](size_t const index) const
{
if (index < SIZE)
return data[index];
throw std::out_of_range("index out of range");
}
};
int main()
{
{
dummy_array<int, 6> arr();
arr[0] = 1;
arr[1] = 2;
for (int i = 0; i < 6; i++)
std::cout << arr[i] << " " ;
std::cout << std::endl;
}
return 0;
}
有人可以解释为什么用“dummy_array arr();”声明吗?导致故障如下。 构建日志:
main.cpp: In function 'int main()':
main.cpp:34:12: error: pointer to a function used in arithmetic [-Wpointer-arith]
arr[0] = 1;
^
main.cpp:34:16: 错误:分配只读位置 '* arr'
arr[0] = 1;
^
main.cpp:35:12: 错误:指向算术 [-Wpointer-arith] 中使用的函数的指针
arr[1] = 2;
^
main.cpp:35:16: 错误:分配只读位置 '*(arr + 1)'
arr[1] = 2;
^
main.cpp:38:27: 错误:指向算术 [-Wpointer-arith] 中使用的函数的指针
std::cout << arr[i] << " " ;
^
最佳答案
dummy_array<int, 6> arr();
这既可以看作是函数声明,也可以看作是变量声明。
编译器总是更喜欢函数声明而不是变量声明,因此您实际上声明了一个名为 arr 的函数,不带任何参数并返回一个 dummy_array。改用这个:
dummy_array<int, 6> arr{};
关于c++ - 虚拟数组<in, 6> arr(); 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56502454/