Сбой с dummy_arrayобр (); - PullRequest
       3

Сбой с dummy_arrayобр ();

0 голосов
/ 08 июня 2019

Проблема в объявлении массива.

Мы можем прокомментировать

#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] << " " ;

                       ^

1 Ответ

2 голосов
/ 08 июня 2019
dummy_array<int, 6> arr();

Это можно рассматривать как объявление функции или объявление переменной.

Компилятор всегда предпочитает объявление функции объявлению переменной, поэтому вы фактически объявили функцию с именем arr, не принимая аргументов и возвращая dummy_array. Используйте это вместо:

dummy_array<int, 6> arr{};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...