Проблема в объявлении массива.
Мы можем прокомментировать
#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] << " " ;
^