在另一个类中调用一个类的成员

Posted

技术标签:

【中文标题】在另一个类中调用一个类的成员【英文标题】:Calling member of one class in another 【发布时间】:2013-12-07 10:32:39 【问题描述】:

对于一项作业,我需要使用掷骰子创建一个游戏,该游戏使用多个类别。对于Dice.cpp,我编写了一个函数,它只获取一个从 1 到 6 的随机掷骰子,然后我需要编写一个单独的类来获取掷骰子的值并使用它来确定在游戏中添加了什么,哪个我在player.cpp 做过。我尝试使用 #include "Dice.h" 就像我使用 main.cpp 一样,但这仍然告诉我我的 d.getRoll() 未在其范围内定义。 takeTurn 函数是问题所在,我需要将其设为 void 并且没有参数。任何帮助都会很棒。

播放器.h

#ifndef PLAYER_H
#define PLAYER_H
#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>
#include "Dice.h"

using namespace std;

class player

    public:
        player();
        void setPlayerName();
        string getPlayerName();
        void setCootieName();
        string getCootieName();
        void takeTurn();
    private:
        int numLeg, numHead, numEye, numWing, numBody, numAntenna;
        string cootieName;
        string playerName;
        int roll;


;

#endif // PLAYER_H

播放器.cpp

#include "player.h"


player::player()

    numLeg = 0;
    numHead = 0;
    numEye = 0;
    numWing = 0;
    numBody = 0;
    numAntenna = 0;
    cootieName = "Undefined";
    playerName = "Undefined";

void player::setPlayerName()

    getline(cin, playerName);

string player::getPlayerName()

    return(playerName);

void player::setCootieName()

    getline(cin, cootieName);

string player::getCootieName()

    return(cootieName);

void player::takeTurn()

    roll = d.getRoll();
    "You rolled a " << roll << "." << endl;
    if (roll == 1)
    
        numBody++;
    
    else if (roll == 2)
    
        numHead++;
    
    else if (roll == 3)
    
        numLeg++;
    
    else if (roll == 4)
    
        numAntenna++;
    
    else if (roll == 5)
    
        numWing++;
    
    else
    
        numEye++;
    
    cout << "Cootie called " << cootieName << " has: " << endl;
    cout << numLeg << " Leg(s)" << endl;
    cout << numHead << " Head(s)" << endl;
    cout << numEye << " Eye(s)" << endl;
    cout << numWing << " Wings(s)" << endl;
    cout << numBody << " Body(s)" << endl;
    cout << numAntenna << " Antenna(s)" << endl;

骰子.h

#ifndef DICE_H
#define DICE_H
#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>

using namespace std;

class Dice

    public:
        Dice(int, int);
        int getRoll();
    private:
        int rollTop, rollBot;
;

#endif // DICE_H

骰子.cpp

#include "Dice.h"

Dice::Dice(int bot, int top)

    rollBot = bot;
    rollTop = top;

int Dice::getRoll()

    return(rand() % rollTop + rollBot);

编辑:这是 main.cpp

#include <iostream>
#include <string>
#include <cstdlib>
#include <time.h>
#include "Dice.h"
#include "player.h"

using namespace std;

int main()

    srand (time(NULL));
    int playerChoice;
    Dice d(1,6);
    player p;

    cout << "Enter player name" << endl;
    p.setPlayerName();
    cout << "Your name is " << p.getPlayerName() << "." << endl << endl;
    cout << "Time to create a Cootie!" << endl;
    cout << "Please name your Cootie!" << endl;
    p.setCootieName();
    cout << "Add body parts using die rolls." << endl;
    cout << "To roll the die, input 1" << endl;
    cout << "To exit, input 0" << endl;
    cin >> playerChoice;
    while(1)
    
        if (playerChoice == 1)
        
            p.takeTurn();
        
        else
        
            return 0;
        
    

【问题讨论】:

什么是d?该变量在哪里声明和定义? 在 getRoll 调用之后您缺少一对括号。 糟糕,修正了括号。 dDice d(1,6); 的 main.cpp 顶部附近声明,它是我的 Dice 类的一部分。 我在使用播放器类之前声明了d,我需要在其他地方声明吗? 必须在 main() 之外声明它,非静态的,如果那是你想要做的。更好的方法是将它包含在播放器中或将其传递给构造函数。 【参考方案1】:

您需要创建Dice 的实例才能像这样调用该方法

Dice d;
roll = d.getRoll();

或者您需要将 getRoll 设为静态。在 Dice.h 的函数声明中,你会放

static int getRoll();

你会这样使用它

roll = Dice::getRoll();

【讨论】:

以上是关于在另一个类中调用一个类的成员的主要内容,如果未能解决你的问题,请参考以下文章

在另一个类中做数据成员的对象,可以先不初始化

在另一个类中声明具有成员初始化器的类的实例

在另一个类c ++中调用成员函数

如何在C#中,在一个类里调用另外一个类的方法

一个方法中的hashMap的值,怎么在另一个类中调用啊?

如何在另一个类中调用一个类的 main() 方法?