【问题标题】:Class Functions Object Oriented Program [closed]类函数面向对象的程序
【发布时间】:2020-03-08 20:53:35
【问题描述】:

我正在学习 C++ 中的类和对象。我试图要求输入他们最喜欢的运动和他们的性别并通过无效显示执行它。我收到 3 个错误。

这是我正在处理的代码:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Question
{
    private:

    int basketball;
    int gender;

    public: 

    void getsports();
    void getgender();
    void display();
};

void Question::getsports()
{
    int sport; 
    cout << "Whats your favorite sports?" << endl; 
    cin >> sport;
}

void Question::getgender()
{
    int gender;
    cout << "Whats you gender?"; 
    cin >> gender; 
}

void Question::display()
{
    cout << "Your answers are " << sport << gender; // line 39 is here
}

int main()
{
    Question obj;
    obj.display(); 

    return 0; 
}

这是错误:

"sport" is undefined line 39
'Sport' undeclared identifier line 39

【问题讨论】:

  • 将完整的错误消息复制/粘贴到问题中(作为文本)。
  • 好的,我修好了!很抱歉第一次在这个网站上发布问题。
  • 请发布您的所有三个错误消息,并指出它们在代码中引用的位置。 (错误通常显示它们所在的行号,但我们在这里没有代码中行号的好处 - 所以使用 cmets 让我们知道每个错误发生的位置)
  • 我在您的代码中看不到任何名为 Sport 的变量。在#include &lt;vector 之后缺少&gt;
  • @EmilyMike 查看类成员变量。 sport 不在其中。 gender 是 - 但是您在 getgender() 中声明了一个新的 gender 变量,因此不会分配类成员 gender

标签: c++ class object


【解决方案1】:

让我们浏览一下您的代码,看看有什么问题。

让我们来看看你的课程Question。它有两个成员变量:int basketballint gender。这些是您在运行代码时要为其赋值的变量。为此,您创建了两个方法:getsports()getgender()

但是这两种方法有什么问题呢?好吧,首先他们永远不会被调用。其次,他们两个都有正在分配的int 变量。这里有一个问题:这两个变量都在方法中声明,那么当方法完成时会发生什么?

当您真正想要的是将这些值分配给类变量时,您正在为函数的局部变量分配值。实现它的一种方法是使用对象的变量,而不是在方法中使用这些变量。由于getsports()getgender() 两种方法都是您的对象的一部分,因此变量int basketballint gender 在这些方法上可用。访问这些变量的一种方法是使用this 运算符,例如:

void Question::getgender(){
      cout << "Whats you gender?"; 
      cin >> this->gender
}

当涉及到void Question::display() 方法时,它试图访问一个名为sport 的变量。但是运动不是你班级的成员Question。正如我们之前所说,您班级的成员是int basketballint gender。因此,这里最简单的方法是例如将int basketball 更改为int sports

现在让我们直接进入您的main 函数。您声明了您的对象并立即想要显示其内容。但是你有没有分配过这些值?那么,与其立即调用display() 方法,不如先调用getgender()getsports() 怎么样?

你可能会得到类似的结果:

int main(){
    Question obj;
    obj.getgender();
    obj.getsports();
    obj.display();
    return 0;
}

就是这样。另外,请记住,int 可能不是您想要存储运动名称的变量类型。例如,我建议看一下std::string

【讨论】:

  • 谢谢!你帮了我很多忙!
猜你喜欢
  • 2018-08-02
  • 2020-05-18
  • 2019-02-25
  • 2018-06-23
  • 1970-01-01
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
相关资源
最近更新 更多