失败,dummy_array<int, 6> arr();

Fail with dummy_array<int, 6> arr();

本文关键字:gt arr lt dummy array 失败 int      更新时间:2023-10-16

问题是数组的声明。

我们可以评论

#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;
        ^

主.cpp:34:16:错误:分配只读位置"* arr">

   arr[0] = 1;
            ^

main.cpp:35:12: 错误: 指向算术中使用的函数的指针 [-Wpointer-arith]

   arr[1] = 2;
        ^

主.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{};