gpt4 book ai didi

c++ - 没有用于调用 Dice::Dice(类构造函数)的匹配函数

转载 作者:行者123 更新时间:2023-11-30 02:50:52 27 4
gpt4 key购买 nike

我正在创建一个骰子游戏。我正在构建文件,但出现以下错误:

No matching function for call to Dice::Dice

ma​​in.cpp:

#include "Dice.h"
#include <iostream>
using namespace std;

int main (){
Dice d(1,6);
cout << d.getRoll() << endl;

return 0;
}

Dice.h:

#ifndef DICE_H
#define DICE_H

class Dice
{
public:
Dice();
void getRoll(int m, int n);
};

#endif

Dice.cpp:

#include "Dice.h"
#include <ctime>
#include <iostream>
using namespace std;

Dice::Dice()
{}

void Dice::getRoll(int m, int n) {
srand(time(0));
(rand() % n)+m;
}

最佳答案

我看到代码有几个问题。以下是我的修复和提示:

首先,Dice 的构造和方法调用将无法编译:

Dice d(1,6);                  // you give arguments to the constructor
cout << d.getRoll() << endl; // your method call has no arguments

但是你定义了:

Dice();                       // constructor takes no arguments
void getRoll(int m, int n); // method takes arguments

其次,srand 只需要执行一次,而不是每次调用 roll 时——也许在 main 函数中:

srand( (unsigned)time( NULL ) );

这会生成生成器的种子,这样每次程序运行时您都应该获得不同的随机数。只调用一次,在第一次掷骰子之前。

第三,您的 getRoll 函数不返回任何内容,这意味着您没有返回任何值。你应该根据它们在现实中或你的规范中代表的想法来命名你的变量:

int Dice::getRoll(int maxEyes) {     // Still no good abstraction
(rand() % maxEyes) + 1;
}

真正的骰子在运行时不会改变它的maxEyes。为什么不尝试一些面向对象而不是函数库类。想想一个真正的骰子对象!下面是一个骰子抽象:

main.cpp

#include "Dice.h"

#include <iostream>

using namespace std;

int main()
{
Dice::randomize(); // Try commenting this out and run the program several times, check the result, then comment it back in

Dice diceWith6Sides(6);
cout << "The 6 sided dice rolls a " << diceWith6Sides.getRoll() << endl;
cout << "The 6 sided dice rolls a " << diceWith6Sides.getRoll() << endl;
cout << "The 6 sided dice rolls a " << diceWith6Sides.getRoll() << endl;

Dice diceWith20Sides(20);
cout << "The 20 sided dice rolls a " << diceWith20Sides.getRoll() << endl;
cout << "The 20 sided dice rolls a " << diceWith20Sides.getRoll() << endl;
cout << "The 20 sided dice rolls a " << diceWith20Sides.getRoll() << endl;
return 0;
}

骰子.h

#ifndef DICE_H
#define DICE_H

class Dice
{
public:
Dice(int sides);
int getRoll();

static void randomize(); // Call only once

private:
int sides;
};

#endif

骰子.cpp

#include "Dice.h"

#include <time.h>
#include <stdlib.h>

Dice::Dice(int sides) :
sides(sides)
{

}

int Dice::getRoll()
{
return ((rand() % sides) + 1);
}

void Dice::randomize()
{
srand((unsigned)time(NULL));
}

希望这是一个好的起点。玩得开心!

关于c++ - 没有用于调用 Dice::Dice(类构造函数)的匹配函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083748/

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