C++;复制构造函数、析构函数错误等 我对C++很陌生。我试图弄清楚复制构造函数和析构函数是如何工作的,但我不能让它仅仅工作
我有两个错误: 错误:应在“;”之前使用主表达式代币 删除[]C++;复制构造函数、析构函数错误等 我对C++很陌生。我试图弄清楚复制构造函数和析构函数是如何工作的,但我不能让它仅仅工作,c++,C++,我有两个错误: 错误:应在“;”之前使用主表达式代币 删除[] 我曾尝试在delete[]之后放置不同的内容,但没有一个有效,所以我暂时将其留空 类DynamicLine没有名为“p2”的成员 我做错了什么?我确实在我的测试程序中删除了p2 这是我的头文件: template<class T> class DLine { public: DLine (T *v1, T *v2) : v1 {v1}, v2 {v2} {} T* v1; T* v2;
template<class T>
class DLine {
public:
DLine (T *v1, T *v2)
: v1 {v1},
v2 {v2}
{}
T* v1;
T* v2;
// Copy constructor
DLine(const DLine &l)
{
v1 = l.v1;
v2 = l.v2;
}
DLine& operator= (const DLine &l) {
if (this == &l) {
return *this;
}
v1 = l.v1;
v2 = l.v2;
return *this;
}
~DLine()
{
delete [];
}
};
模板
类线{
公众:
数据线(T*v1,T*v2)
:v1{v1},
v2{v2}
{}
T*v1;
T*v2;
//复制构造函数
数据线(常数数据线和l)
{
v1=l.v1;
v2=l.v2;
}
数据线和运算符=(常量数据线和运算符){
如果(此==&l){
归还*这个;
}
v1=l.v1;
v2=l.v2;
归还*这个;
}
~DLine()
{
删除[];
}
};
我还有一个向量类:
using namespace std;
Vector2::Vector2(float nx, float ny)
: x {nx}
, y {ny}
{
}
float Vector2::distanceFrom(Vector2 v) {
return sqrt( (x - v.x)*(x - v.x) + (y - v.y)*(y - v.y) );
}
ostream& operator << (ostream& os, Vector2 v) {
return os << "(" << v.x << "," << v.y << ")";
}
使用名称空间std;
Vector2::Vector2(浮点nx,浮点ny)
:x{nx}
,y{ny}
{
}
浮点向量2::距离(向量2 v){
返回sqrt((x-v.x)*(x-v.x)+(y-v.y)*(y-v.y));
}
ostream&operator您没有动态分配内存。。。那你想删除什么
您不需要删除所有指针。…delete
运算符用于删除通过new
运算符分配的内存
因此,您可以从析构函数中删除delete
语句。至少您使用了错误的运算符delete[]
(请参阅):
delete
用于释放动态分配的内存
v1
和v2
是类Dline
的成员,p2
只是您在程序中声明的变量
读一本C++的书。这是我的建议。你真的需要了解你在做什么,我认为你没有。@o_weisman:这的确是一个基本问题,答案相对琐碎,但你可以不回答这个问题,而只是解释这个问题。这会更有成效,不是吗?你想用delete[]
删除什么?@o_weisman虽然你的观点可能是正确的,但有更好的表达方式。@o_weisman:请阅读并遵守:始终保持礼貌并享受乐趣不同意和表达关切是可以的,但请保持礼貌。在网络连接的另一端有一个真实的人,不管他们看起来有多误导。我们来这里是向同龄人学习,而不是互相吼叫。
from。好的,我理解删除。如果我只是将p2改为v1,那么它是正确的,那么构造函数就没有问题了?你说的是什么问题?在我的测试程序中,我想使用以下行:l2.p2=&p3;给l2第二个点,也就是p3。但它说:没有名为p2的成员。当我在那里把p2改成v2时,它会编译,但我不认为它会像我试图做的那样。你是说你想给'l2.v2'赋值吗?它与构造函数不冲突是的,我想分配新值。但如果这与他们没有冲突,那我为什么不能这样做呢。
Vector2 p1 {3.0, 5.0};
Vector2 p2 {0,0};
Vector2 p3 {7.0, 8.0};
DLine<Vector2> l1 {&p1, &p2};
DLine<Vector2> l2 {nullptr, nullptr};
l2 = l1;
l2.p2 = &p3;
p1.x = 2.0;
pt = new MyClass[3];
delete[] pt;