Мой конструктор принимает std::array
. Я пытаюсь дать ему значение по умолчанию, но вызов конструктора без аргументов дает эту ошибку:Как использовать аргумент по умолчанию для std :: array? «массив должен быть инициализирован с помощью инициализатора, заключенного в скобки»
$ g++ -std=c++11 -Wall -Werror -Wextra -pedantic-errors test.cpp Position.cpp -o test
test.cpp: In function ‘int main()’:
test.cpp:14:29: error: array must be initialized with a brace-enclosed initializer
Position *y = new Position();
^
test.cpp:14:29: error: too many initializers for ‘std::array<unsigned char, 8ul>’
номер строки различны. Это мой код:
// test.cpp
int main() {
Position *x = new Position({1,1,1,1,1,1,1,1}); // works
Position *y = new Position(); // does not work
}
// Position.cpp
#include <cstdint>
#include <array>
#include "Position.h"
Position::Position(std::array<uint8_t,8> columns_) {
columns = columns_;
}
// Position.h
#ifndef POSITION_H
#define POSITION_H
#include <array>
class Position {
public:
Position(std::array<uint8_t,8> = {0,0,0,0,0,0,0,0});
private:
std::array<uint8_t,8> columns;
};
#endif
У меня что-то не так?
Почему не ставят перегрузку 'Позиция :: Положение()'? – deepmax
Это невозможно сделать, [Передача массива в качестве параметра со значениями по умолчанию в int main()] (http://stackoverflow.com/questions/4894094/passing-an-array-as-a-parameter-with-default -values-in-int-main) – cpp
@cpp он не пытается это сделать. Он хочет значение по умолчанию для аргумента * конструктора *, а не основного. – Adam