【问题标题】:C++ left of getter() must have class/struct/uniongetter() 左侧的 C++ 必须具有类/结构/联合
【发布时间】:2016-04-19 07:05:39
【问题描述】:

我正在尝试对 C++ 中的类继承进行练习。主要思想是我有一个点类(通过2个坐标定义一个点)并且我有不同的形状(例如矩形,正方形,三角形......等)

我的 point 类有一些 getter,称为 getX() 和 getY(),它们都返回双精度值。

在我所有的形状类(矩形、正方形、三角形)中,我都有一个打印方法,可以将它们的类成员打印到控制台。在该方法中,我需要获取 Point 实例的 x 和 y。问题是我这样做时会出现以下编译错误:

error C2228: left of '.getX' must have class/struct/union

这里有一些包含我其余代码的粘贴箱:

点类头:http://pastebin.com/vA29dTkE

点类cpp文件:http://pastebin.com/E8GKrsHT

矩形类头:http://pastebin.com/pXNXX18q

矩形类cpp文件:http://pastebin.com/R09vgfdb

问题出现在矩形类 cpp 文件的第 18 行和第 19 行。 提前感谢您的帮助:)

【问题讨论】:

  • pastebin 链接不会永远存在 - StackOverflow 要求您直接在问题中发布最少、完整的代码,因此它和任何答案对以后的读者仍然可能有用。
  • 您好!如果我没看错,当你使用point origin(double, double); 时,你会创建一个名为 origin 的函数,而不是一个名为 origin 的点。您必须写点origin; 以在您的多边形中创建一个名为origin 的变量。然后在您的构造函数中,调用变量原点的构造函数。在这里,当您调用 origin.getX(); 时,您调用的是函数而不是点上的 getX(),因此它不起作用。
  • 你需要发一个minimal reproducible example

标签: c++ class oop pointers getter


【解决方案1】:
 point rectangle::origin(double, double);

是一个需要两个双精度的函数,因此你必须这样称呼它:

double rectangle::draw()
{
    std::cout << "Rectangle membembers:\n";
    //x = this->origin.getX();
    std::cout << this->width;
    std::cout << this->height;
    std::cout << this->origin(0, 0).getX(); // here
    std::cout << this->origin(0, 0).getY(); // here
}

您可能想声明并将其用作:

class rectangle : polygon
{
private:
    point origin;
};

rectangle::rectangle(double x, double y, double width, double height)
 : origin(x, y) {
    this->width = width;
    this->height= height;
}

【讨论】:

  • 我很确定他不希望 origin 是一个函数,而是一个类型点的变量。 (这里的原点是哪里的函数?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多