C++中的嵌套类错误

Nested classes error in C++

本文关键字:错误 嵌套 C++      更新时间:2023-10-16

作为一名初学者,我正在自学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();
}

不知怎么的,我刚得到

错误:没有可用于调用的匹配函数'四边形:四边形(四边形::顶点)'

已经坚持了整整一个下午。有人能解释一下我的代码出了什么问题吗??我知道我的构造函数出了问题,但我就是无法修复…

以下不是您所期望的:

quadrangle(vertex(int a, int b)) : p1(a,b) {};

它是一个采用返回顶点的函数并采用2int的构造函数。然后使用未初始化的成员CCD_ 2和CCD_。

你想要的只是:

quadrangle(const vertex& v) : p1(v) {}

(并删除成员ab)。

你的错误说明了一切,你没有构造函数:

 quadrangle(const vertex & old);

并且需要进行此初始化:

 quadrangle q1(quadrangle::vertex(2,3));

这真的很奇怪:

quadrangle(vertex(int a, int b)) : p1(a,b) { }

它看起来像是一个接受函数原型(或函数类型?)的构造函数,但我想它不是一个函数指针。p1(a,b)之所以编译,是因为类中有这样的变量。

[编辑]

在Quentin的评论之后-上面的声明是一个函数指针

函数参数声明中的函数类型衰减到指针

以下示例显示了将函数指针作为函数的参数写入函数的各种方法:

std::string bar(int a, int b) {
    std::cout << "bar";
    return "";
}
void foo1(std::string(int a, int b)) { } // Unnamed function pointer
void foo2(std::string(pf)(int a, int b)) { pf(0,0); } // Named function pointer
void foo3(std::string(*pf)(int a, int b)) { pf(0,0);} // Named function pointer
int main() {
    foo1(bar);
    foo2(bar);
    foo3(bar);    
}