gpt4 book ai didi

c++ - 如何为 std::array 使用默认参数? "array must be initialized with a brace-enclosed initializer"

转载 作者:太空狗 更新时间:2023-10-29 23:45:26 25 4
gpt4 key购买 nike

我的构造函数采用 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( std::array<uint8_t,8> = std::array<uint8_t,8>{0,0,0,0,0,0,0,0} );

虽然这(或使用双括号)有效,但它会在采用默认值时在每个调用方创建一个拷贝。重载的构造函数可以避免这种代码膨胀,因此我建议优先使用重载而不是默认参数。

关于c++ - 如何为 std::array 使用默认参数? "array must be initialized with a brace-enclosed initializer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19152192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com