C 与范围和声明混淆
C++ confused with scope and declarations
我已经发布了另一个有关结构与类别的问题。我相信我得到了很好的反馈,所以我回去处理我的代码。这是让我感到困惑的原因(也许是幼稚的;))
我需要一个称为CPORT的类(或结构不介意),它只是用x,y坐标定义了一个空间点。 所有形状级都将得出。因此,对于Crottangle,这是用于矩形的类,Copt将用作基本元素。要实例化矩形,呼叫者必须提供2分的坐标,这将是矩形上尺&分别弯曲的角落。我希望Crottangle构造器要做的是实例化这两个点,因为它自己的私人点并使用它们来定义矩形,进行计算等。,因此呼叫者无法直接更改它们。这是我尝试做的示例(显然是错误的):
class cPoint
{
public:
int X,Y;
cPoint();
cPoint(int x, int y)
{
X=x;
Y=y;
}
};
class cRectangle
{
friend class cPoint;
public:
Rectangle(int x1,int y1,int x2,int y2) //the constructor of cRectangle
{
ul(x1,y1);
dr(x2,y2);
}
unsigned int area()
{
return((dr.X-ul.X) * (dr.Y-ul.Y));//example function that uses ul,dr
}
private:
cPoint ul; //uP lEFT point
cPoint dr; //dOWN Right point
};
我遇到的错误是"错误1 copt 谢谢
/* use initilization list */
Rectangle(int x1,int y1,int x2,int y2) : ul(x1,y1), dr(x2,y2)
{
}
您的代码不会编译,因为这里
Rectangle(int x1,int y1,int x2,int y2) //the constructor of cRectangle
{
ul(x1,y1);
dr(x2,y2);
}
您想在cPoint
类的实例上调用operator(int,int)
,并且尚未提供该操作员的定义。
输入构造函数的主体后,所有成员都是初始化的,您只能分配给它们以及您可以为活物体做的所有其他成员。
在您尝试这个
时 ul(x1,y1);
dr(x2,y2);
ul
和 dr
已经被默认初始化(默认的构造函数是如果您不明确启动初始化器成员,则称为构造器 - 读取)。当编译器看到这两行时,似乎您正在尝试调用不存在的过载的operator()
,因此自然会报告错误。
要初始化成员,请使用构造函数初始化列表:
Rectangle(int x1,int y1,int x2,int y2)
: ul(x1,y1), dr(x2,y2) // <-- initialization list
// using cPoint::Cpoint(int, int) constructor
{
// note, empty body
}
相关文章:
- 错误:未在此范围内声明'reverse'
- 在基于范围的for循环中使用结构化绑定声明
- 错误:"imread"未在此范围内声明
- 我在范围内未声明的错误类有问题
- 未在此范围内声明错误 'xy'
- Socklen_t未在此范围内声明
- 如何从未知视图中声明范围::v3::View 变量
- 错误:'[' 之前预期的非限定 id 和错误:'users'未在此范围内声明
- "Main"已在当前范围内声明
- c++ 变量在宏的扩展中没有在这个范围内声明
- 朋友声明的复杂范围界定规则有什么意义?
- C++ 在编译过程中 strtok 函数 Eclipse 说没有在范围内声明?
- 'num1'未在此范围内声明
- 在此范围内未声明错误"Clreol"
- 如何找到在本地范围内声明的变量的地址?
- 简化在 Pybind11 中为 C++ 模板类生成包装类:模板声明不能出现在块范围内
- C++模板专用化中的声明范围
- 这是有效的C++代码吗?(在声明范围之外使用本地类型)
- 函数声明范围
- 如何在类声明范围内使用“using space::function”