【问题标题】:new Edit Area and coordinates新的编辑区域和坐标
【发布时间】:2016-10-14 10:34:26
【问题描述】:

好的,我编辑我的代码,我想做的很简单,我有一个带有坐标(x,y)的大形状。我想要做的是调整我的原始形状的大小,将它存储在一个名为“new”的类中的新图形中,并将这个新形状移动到我想要的坐标(x,y)。

// Example program
#include <iostream>
#include <string>

// Base class Shape

class Shape 
 {
 public:

Shape(int inwidth, int inheight): width(inwidth), height(inheight){
}
void ResizeW(int w)
{
 width = w;
}
void ResizeH(int h)
{
 height = h;
}
 void moveF(int x_delta, int y_delta) 
{
x1 = x_delta;
y1 = y_delta;
x2 = x_delta;
y2 = y_delta;
}

 protected:

int x1=0, y1=0, x2=5, y2=6;
int width;
int height;
 };

 // Primitive Shapes

 class Ps2: public Shape
 {
 public:

Ps2 (int width, int height): Shape(width, height){
 }
int getArea()
{
    return (width * height);
}
 };

 // Derived Shapes

class New: public Ps2 
{

 int x1_relativ, y1_relativ, x2_relativ, y2_relativ;
 public:
 int area;
 New(): Ps2(8, 4), area(getArea()){ }
 };



 int main(void)
 {
 New kit;
 moveF.kit (4, 3, 5, 7);
 std::cout << "Total area: " << kit.getArea();
 std::cout << "Cordinates are: " << kit.moveF();

 return 0;
 }

现在我有四个错误:在函数“int main()”中: 66:6:错误:未在此范围内声明“moveF” 68:51:错误:没有匹配的函数调用'New::moveF()' 68:51:注:候选人是: 21:11:注意:void Shape::moveF(int, int) 21:11:注意:候选人期望 2 个参数,提供 0 个。 另外我认为我无法使用“move.f”我创建了任何帮助?

【问题讨论】:

  • 您的问题不太清楚,能否详细说明您需要什么?
  • @shrike 我画了一个草图。它可以提供帮助
  • 也许您想创建一个Shape 类,然后从中派生类(如SquareEll)。是这个意思吗?
  • @Beta 有点像!但是假设我要派生的类是由 Square 和 Ell 的几何变换组成的形状,并且必须放在我的 Shape 类中,我该怎么办?
  • 也许你有一个新用户名 - 因为这是同一主题 stackoverflow.com/questions/37599215/inheritance-classes/…

标签: c++ class coordinates overlap area


【解决方案1】:

好吧,编译器会告诉你问题出在哪里:

moveF.kit (4, 3, 5, 7);

不是有效代码。你是说 kit.moveF 吗?另外,为什么要四个参数? moveF 有两个。

std::cout

有两个错误,首先,moveF 需要两个您没有提供的参数,其次,kit.moveF 是一个 void,因此不会产生 std::cout 可以显示的任何内容。

此外,您的属性 x1、x2、y1、y2 无法从外部访问。这似乎不是故意的。派生类可以访问它们,但目前还没有。

此外,New 是一个可怕的类名称。起初看到新套件让我感到困惑;。新显然不是保留,但如果您知道我的意思,它会让人感觉保留。

我的建议是您阅读有关类和方法的教程。看来您对方法如何工作的理解存在缺陷。

【讨论】:

  • 我修复了它,但现在我得到了 In function 'int main()': 68:47: error: no matching function for call to 'New::moveF()' 68:47: 注意:候选人是:21:7:注意:void Shape::moveF(int, int) 21:7:注意:候选人需要 2 个参数,0 提供 @Aziuth
  • 再一次,正如您的编译器告诉您的那样:您调用 moveF 时不带参数,但它需要两个。您需要为 x_delta 和 y_delta 提供一些值。您需要将其称为 kit.moveF(5,3);但是让我们采取正确的方法,让我们从您告诉我们 moveF 应该做什么开始。以及班级本身应该做什么。 moveF 是为了翻译形状吗?如果是这样,为什么不 x1 += x_delta?为什么不再使用 x1?
  • @FL93 也许给你一些更可靠的东西,你可能想要在那一行写 std::cout
  • 我正在尝试翻译,我可以编辑我的代码以便更好地理解它吗?
  • 在我们这样做之前,我们需要先指定代码应该做什么。此外,您想自己编写代码,复制代码不会学到任何东西。你到底有什么不明白的?你认为你的方法有什么作用?描述他们。再说一遍,我怎么强调都不过分,你需要基础教程!
猜你喜欢
  • 2012-11-08
  • 2017-04-11
  • 1970-01-01
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多