动态创建新结构 我对C++非常(非常)陌生,并且我对结构有一些理解。我正在使用课程中的示例代码,因此: struct Point { int x; int y; }
在另一段代码中,我想编写以下内容:动态创建新结构 我对C++非常(非常)陌生,并且我对结构有一些理解。我正在使用课程中的示例代码,因此: struct Point { int x; int y; },c++,C++,在另一段代码中,我想编写以下内容: drawLine(point1, new Point(x, y)); 这是行不通的,我知道我试图将结构声明为类,但有没有办法做到这一点?我目前编写了一个helper函数,它从x,y返回一个点,但这似乎是迂回的。new返回一个指针。如果为点定义合适的构造函数,则只需绘制线(点1,点(x,y))就可以了 (drawLine(point1,*(newpoint(x,y))也可以,但会导致内存泄漏;每个new都应该通过delete来平衡)问题不在于您试图将结构声明为
drawLine(point1, new Point(x, y));
这是行不通的,我知道我试图将结构声明为类,但有没有办法做到这一点?我目前编写了一个helper函数,它从x,y返回一个点,但这似乎是迂回的。
new
返回一个指针。如果为点定义合适的构造函数,则只需绘制线(点1,点(x,y))
就可以了
(drawLine(point1,*(newpoint(x,y))
也可以,但会导致内存泄漏;每个new
都应该通过delete
来平衡)问题不在于您试图将结构声明为类(实际上是类)
问题是,您试图从两个整数
构造一个点
,但没有合适的构造函数。以下是如何添加一个:
struct Point {
int x;
int y;
Point(int x, int y): x(x), y(y) {}
};
<> C++中结构和类的区别并不大。为什么不在结构中添加一个构造函数?除非drawLine()
拥有对象的所有权,否则就会出现内存泄漏。只需添加一个构造函数(与类一样使用结构)Point(intpx,intpy):x(px),y(py){}
C++与C#或Java有根本的不同——您可以管理自己的内存。每当你说new
,你都需要相应的delete
。。。。但通常你可以说drawLine(点1,点(x,y))代码>。表达式点(x,y)
是一个临时对象,其生存期结束于代码>。我想你可以用元组来实现,而在C++11中,你可以将结构初始化为drawLine(点1,点{x,y})代码>当我尝试这样做时,会得到一个非常模糊的“从“int”到“Point”之间不存在合适的构造函数”。具体地说,我正在尝试绘制线(point1,Point(x+1,y+2)),如果相关的话。@woopf:按照aix给出的定义构造函数。by“不是那么大”,我想您的意思是,结构的成员默认为public,而类的成员默认为private。重要的是要理解它们实际上是如何不同的,而不是仅仅意识到差异是最小的。更多的细节是。@Cody Gray重要的是要理解的是,除了一些容易覆盖的默认值之外,它们并没有真正的区别。struct
仍然定义类类型,并且可以具有类类型的所有属性(私有成员、函数、甚至虚拟、构造函数、析构函数等)。关键字struct
和class
之间的选择纯粹是约定和编码准则之一。@James:我在哪里有不同的观点?@James,@Cody:我想说dontomaso的观点是,“即使它[只是]一个struct
它仍然可以有一个构造函数,让 WOOPF知道C++结构不限于C类特征。差异的其他细节与这个具体问题无关。初始化结构的方法已经过时,不能用MSVC编译。@IngeHenriksen NPE的建议没有过时之处。您只需要在结构的最后一个括号末尾加一个分号,否则就可以了。