【发布时间】:2016-05-02 08:32:50
【问题描述】:
作为初学者,我正在自学 C++,但在嵌套类方面遇到了一些问题。我试图为给定四个顶点的四边形定义一个类(定义一个称为顶点的点),它 由二维点的嵌套类的对象表示。我只用一个点来测试我的答案。我对这个问题的回答是:
#include <iostream>
#include <assert.h>
using namespace std;
class quadrangle
{
public:
class vertex
{
private:
public:
int x, y;
friend class quadrangle;
vertex();
vertex(int a, int b);
vertex(const vertex & old);
};
vertex p1;
int a, b;
friend class vertex;
quadrangle();
quadrangle(vertex(int a, int b)) : p1(a,b) {};
quadrangle(const quadrangle & old);
void draw();
};
quadrangle::vertex::vertex()
{
x = 0; y = 0;
}
quadrangle::vertex::vertex(int a, int b)
{
x = a; y = b;
}
void quadrangle::draw()
{
cout << "p1: (" << p1.x << "," << p1.y << ") " << endl;
}
quadrangle::quadrangle()
{
p1.x = 0; p1.y = 0;
}
int main()
{
quadrangle q1(quadrangle::vertex(2,3));
q1.draw();
}
不知何故我得到了
错误:没有匹配的调用函数 '四边形::四边形(四边形::顶点)'
并坚持了一个下午。有人可以解释我的代码有什么问题吗?我知道我的构造函数有问题,但我无法修复它......
【问题讨论】:
-
在发布有关构建错误的问题时,请包含 complete 错误输出,包括任何信息说明。错误消息很可能包含实际需要的所有信息,但由于我们无法看到所有信息,因此我们没有所有信息。因此,请编辑您的问题以包含完整的输出,完整且未经编辑,只需复制粘贴即可。
-
当你在它的时候,请drop that
using namespace std;;) -
有点跑题:为什么
vertex是quadrangle的嵌套类?会例如类triangle定义不同的顶点? -
调试技巧:简化。嵌套类可能会令人困惑,所以如果事情不正常,请尝试将嵌套类移动到全局范围。那不会解决这个问题,但它会为这个问题产生一个更好的标题。这不是对嵌套类使用的评论。看到外面移不影响问题后,可以放回里面了。
标签: c++ object compiler-errors inner-classes