【发布时间】:2013-10-09 17:43:07
【问题描述】:
我的构造函数采用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
我做错了什么?
【问题讨论】:
-
为什么不重载
Position::Position()? -
@cpp 他不想那样做。他想要 constructor 的参数的默认值,而不是 main.
-
@Adam,我知道,我参考了这个问题的答案,据说,不可能通过值将完整的内存块作为参数传递给函数,并且它与 main() 无关。
-
@cpp 如果你被命名为
cpp11,你就不会这么说。
标签: c++ c++11 constructor default-value stdarray