C++中的嵌套类错误
Nested classes error in C++
作为一名初学者,我正在自学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) {}
(并删除成员a
、b
)。
你的错误说明了一切,你没有构造函数:
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);
}
相关文章:
- 瓦尔格林德报告在 =带有嵌套shared_ptrs的运算符上的读取错误
- MSVC 2017 - 错误 - 如何将模板类 X 的模板成员函数声明为嵌套类 X::Y 的好友
- 错误:#include 在开发C++中嵌套得太深
- C++ 嵌套类模板 错误 C2440 '=':无法从'type'转换为'same type'
- 为什么我收到以下错误:"no match for 'operator=='"?(带模板的嵌套类)
- C 嵌套结构上的 g++ 编译错误
- 访问range_expression中的嵌套元素会返回不完整的映射(段错误)
- 将 for 循环与嵌套的 while 循环并行化时出现 OpenMP 分段错误
- 模板化函数语法错误中使用的模板化类中的嵌套类
- 使用许多嵌套的#include语句对编译器错误进行故障排除
- 可能的 ComputeCPP SYCL 错误读取嵌套缓冲区
- 为什么我在编译中经常出现错误:包含嵌套太深的 C++
- 无法发现嵌套的循环错误
- boost :: fibonacci_heap:带有比较器重新定义圆形定义错误的嵌套定义
- 解决具有嵌套模板化变量的 Visual Studio 内部编译器错误
- 使用嵌套类的LNK错误
- YAML-cpp 解析嵌套映射和序列错误
- 通过指向成员的指针对嵌套访问进行编译时评估期间出现 GCC 错误
- LNK2019在C 中使用嵌套类别的错误
- C 禁用C1061错误 - 嵌套到深处的块