【问题标题】:Class and Object Practice类和对象实践
【发布时间】:2019-05-10 17:54:34
【问题描述】:

我正在练习使用基本的对象和类。我知道我在语法上弄乱了一些东西,但不知道是什么。

#include <iostream>
using namespace std;


class Pizza {
    public:

    string topping;
    int slices;


        void GetPizza(string topping, int slices) {
            topping = topping;
            slices = slices;
        }
}; 

int main() {
    Pizza pizza1;

    pizza1.GetPizza("cheese", 8);

    cout << pizza1.GetPizza;

    return 0;
}

我正在尝试打印披萨的配料和片数1。我只是不断收到编译器错误。我还想尝试只打印顶部或切片编号,但也无法真正弄清楚。

编辑:

我的代码的 v2 与错误调用不匹配:

#include <iostream>
using namespace std;


class Pizza {
    public:

    string topping;
    int slices;


        void GetPizza(string t, int s) {
            topping = t;
            slices = s;
        }
}; 

int main() {
    Pizza pizza1;

    pizza1.topping("cheese");

    cout << pizza1.topping("cheese");

    return 0;
}

【问题讨论】:

  • 你肯定弄乱了代码格式。请看ClangFormat
  • 使用这个:cout
  • topping = topping; 不会做任何有用的事情。您的局部变量会影响外部范围内的变量。
  • 您是否应该使用GetPizza() 而不是Pizza 类的正确构造函数?

标签: c++ class object


【解决方案1】:

pizza1.GetPizza 是类成员函数。你不能把它喂给 cout。

如果你想打印一些东西,打印类成员变量。像这样:

cout << pizza1.topping;
cout << pizza1.slices;

同样在GetPizza 函数中,你有以下几行:

topping = topping;
slices = slices;

编译器如何知道左侧指的是成员变量,右侧指的是函数参数(这可能是本意)?确保他们的名字不同。

void GetPizza(string t, int s) {
        topping = t;
        slices = s;
    }

重新编辑 v2:

pizza1.topping 不是函数。它是string 类型的成员变量。你不能这样称呼它:

pizza1.topping("cheese");

如果你想给它赋值,正确的语法是:

pizza1.topping = "cheese";

下一行也是如此。

【讨论】:

  • “确保他们的名字不同” - 我 100% 同意,但有 不同的选择:您可以使用 this-&gt;topping 明确引用成员变量。但是,是的,一开始就没有阴影会更好
  • 所以我按照您的建议更改了变量名称,并尝试打印类变量,而不是通过调用函数进行打印。现在我收到“不匹配调用...”错误。我想如果你想写这样的东西,你会怎么做?我得到了类和变量的概念,但我对需要去哪里以及为什么更加模糊
  • 我将尝试两个粘贴到我的问题中
  • 我没有看到任何变化。
  • 我试图编辑帖子,但它说在同行评审之前不会显示?对不起,我是这个网站的新手。我在 πάντα ῥεῖ 的回答上留下的评论总结了我的问题。
【解决方案2】:

错误在这里 cout &lt;&lt; pizza1.GetPizza; 根据您的实现,GetPizza 方法调用需要两个参数。因此,在打印时,您还需要传递这些参数,类似于您在下一行中所做的。 pizza1.GetPizza("cheese", 8);

【讨论】:

  • 我的回答中提到了更多问题。
  • @πάντα ῥεῖ 我没有阅读您的答案,因为它不存在,而我自己写了答案。你必须很擅长在代码中找到整个错误,同时你必须鼓励我们,他们仍然试图在代码中找到错误。
  • @YatShan 我认为 πάντα ῥεῖ 意味着从答案复制内容到评论是不值得的。相反,该答案被“通过引用”合并到评论中(假装它被复制到评论中作为更详尽答案的示例)。
  • @JaMiT 我不明白你的评论。我没有从任何地方复制。我写了自己的答案,看着问题。
  • @YatShan 呃……什么?好的,我会在不使用代词的情况下再试一次。该答案已“通过引用”合并到评论中(为了理解 πάντα ῥεῖ 的初始评论,假装 πάντα ῥεῖ 的初始评论开始“还有更多问题”然后是描述这些问题的 πάντα ῥεῖ 的回答部分)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
相关资源
最近更新 更多