不能调用对象c++

Cannot call objects c++

我是 c++ 和堆栈溢出的新手,所以如果我不完全理解你在说什么,请原谅,我的目标是将我的井字代码从使用函数转换为 类 和对象使用头文件。

在创建一个对象 returns int main 在结果中使用的字符串后,我在 main.cpp 中声明它,并在 if 语句中尝试调用它时(if (rps(p1, p2) == "tie")) 我收到“标识符未定义”错误。我之前在指导教程中调用过这些对象并回顾项目并将其实施到其中,它有效。我认为这与程序的范围有关,但我已经尝试移动它和其他东西,只需要一些帮助(我的代码在下面提供)。

这是我在main.cpp

中创建的对象
std::string Game::rps(std::string p1, std::string p2)
{
    std::string tie = "tie";
    std::string p1w = "p1w";
    std::string p2w = "p2w";
    //tie
    if (p1 == p2) {
        return tie;
    }
    //rock vs sci p1
    if (p1 == "rock" && p2 == "scissor") {
        return p1w;
    }
    //rock vs sci p2
    if (p2 == "rock" && p1 == "scissor") {
        return p2w;
    }
    //paper vs rock p1
    if (p1 == "paper" && p2 == "rock") {
        return p1w;
    }
    //paper vs rock p2
    if (p2 == "paper" && p1 == "rock") {
        return p2w;
    }
    //sci vs paper p1
    if (p1 == "scissor" && p2 == "paper") {
        return p1w;
    }
    //sci vs paper p2
    if (p2 == "scissor" && p1 == "paper") {
        return p2w;
    }
}

调用对象:

if (rps(p1, p2) == "tie") {
    cout << "Same Move, Try Again!" << "\n" << "\n";
}

头文件:

#pragma once
#include <string>

class Game
{
public:

private:
    std::string rps(std::string p1, std::string p2);
};

首先,成员函数 rps 将无法访问,如果您希望它被 class 用户调用(即在 main 中,而不是由 [=25= 内部调用) ] 实例),你需要把它放在 public.

class Game {
public:
    std::string rps(std::string p1, std::string p2);
};

然后您需要在 main 中创建 Game 的实例。如

int main () {
    Game g;
    std::string p1, p2;
    // Assume we assigned some values to p1 and p2
    if (g.rps(p1, p2) == "tie") {
        cout << "Same Move, Try Again!" << "\n" << "\n";
    }
}

注意,我们在创建的游戏实例 class 对象 g 上调用 public 成员函数。因此,我们首先需要实例化 Game class,因为 class 本身只是创建“有形”对象的方法。

  1. 您必须将函数 rps 放入 public 才能在 main
  2. 中使用它
  3. 您必须声明您的 class 成员 的 实例 [例如:游戏玩家 1(游戏是你声明的 class)]