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;

我有两个错误:

错误:应在“;”之前使用主表达式代币

删除[]

  • 我曾尝试在delete[]之后放置不同的内容,但没有一个有效,所以我暂时将其留空 类DynamicLine没有名为“p2”的成员

  • 我做错了什么?我确实在我的测试程序中删除了p2
  • 这是我的头文件:

    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;