gpt4 book ai didi

c++ - 在头文件中定义成员对象时调用非空构造函数

转载 作者:行者123 更新时间:2023-11-28 02:44:01 25 4
gpt4 key购买 nike

我觉得这只是一个句法问题,但我找不到一种独特/简洁的方式来描述它,所以 Google 没有帮助。

这是一个代码片段,可以看出我在说什么。阻止编译的部分在评论中指出。

Deck.h:

#include <random>
#include <iostream>

class Deck{
int top;
int cards[52];

public:
Deck();
void shuffle();

private:
// the "(0,51)" on the following line is a syntax error
// without it, compilation is fine
std::uniform_int_distribution<int> distribution(0,51);
std::shuffle_order_engine<std::default_random_engine, 52> engine;
};

甲板.cpp:

#include "Deck.h"
#include <random>
#include <algorithm>

Deck::Deck(){}

void Deck::shuffle(){
top = 0;
int oldCards[52];
std::copy_n(cards, 52, oldCards);
for(int i = 0; i < 52; i++){
int random = distribution(engine);
std::cout << "random= " << random << std::endl;
cards[i] = oldCards[random];
}
}

我需要用 0 到 51 的范围实例化 uniform_int_distribution 来洗牌。我可以将其声明为指针并动态分配它,但这似乎没有必要。

根据 C 语言的经验,我正在努力学习编写良好的、惯用的 C++ 代码,所以您能指出的任何其他内容都将不胜感激。当然,一旦我可以编译,就会调试 shuffling 的实际工作。

感谢您的任何回答。

最佳答案

您可以使用大括号,或复制初始化语法。

或者,您可以在每个构造函数的成员初始化列表中初始化该成员。

对于 C++03,后者是唯一的可能性。


花括号:

std::uniform_int_distribution<int> distribution{ 0, 51 };

复制初始化语法(仅在类型可复制或可移动时可用):

std::uniform_int_distribution<int> distribution =
std::uniform_int_distribution<int>( 0, 51 );

构造函数成员初始化列表中的初始化:

Deck::Deck()
: distribution( 0, 51 )
{}

关于c++ - 在头文件中定义成员对象时调用非空构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25049300/

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