C++中的嵌套类错误

Roy*_*mmy 3 c++ compiler-errors object inner-classes

我是自学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();
}
Run Code Online (Sandbox Code Playgroud)

不知何故,我得到了

错误:没有用于调用'quadrangle :: quadrangle(quadrangle :: vertex)'的匹配函数

并且坚持了整整一个下午.有人可以解释我的代码中有什么问题?我知道我的构造函数有问题,但我无法解决它...

Jar*_*d42 6

以下不是您的期望:

quadrangle(vertex(int a, int b)) : p1(a,b) {};
Run Code Online (Sandbox Code Playgroud)

它是一个构造函数,它接受一个函数返回顶点并取2 int.然后你初始化成员顶点P1与uninitilized成员ab.

你想要的只是:

quadrangle(const vertex& v) : p1(v) {}
Run Code Online (Sandbox Code Playgroud)

(并删除成员a,b).