C++复制构造函数、析构函数错误等
C++ copy constructor, destructor error and more
我对C++真的很陌生。我试图弄清楚复制构造函数和析构函数的工作原理,但我无法让它正常工作。
我得到两个错误:
错误:";"标记之前的预期主表达式
删除[];
- 我试图在删除 [] 后放置不同的东西,但它们都不起作用,所以我目前只将其留空。
类 DynamicLine 没有名为 'p2' 的成员,
- 我做错了什么?我在我的测试程序中做了decleare 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 [];
}
};
我还有一个向量类:
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 << ")";
}
这是我测试程序的一部分:
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;
-
delete
用于释放动态分配的内存。 -
v1
和v2
是类Dline
的成员,p2
只是您在程序中声明的变量。
您没有动态分配内存...那你想删除什么...
您不需要删除所有指针。delete
运算符用于删除使用通过运算符分配的内存new
。
所以在这里你可以从析构函数中删除delete
语句。
至少你用错了运算符delete[]
(见 http://www.cplusplus.com/reference/new/operator%20delete%5B%5D/):
pt = new MyClass[3];
delete[] pt;
相关文章:
- 不命名构造函数和析构函数上的类型错误
- 导致 Seg 错误的 SingleLinkedList 的析构函数
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- 矢量擦除调用的错误析构函数
- 在析构函数中调用"delete"运算符时"compiler is out of heap space"编译器错误
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- 导致堆缓冲区错误的动态分配数组的析构函数
- 非默认析构函数会导致不完整的类型错误
- 析构函数删除错误的元素
- 使用自定义工具集获取动态退出析构函数链接错误 - eh 矢量析构函数
- 使用 boost::thread 运行函子,但析构函数被错误地调用
- 错误 c++ 在令牌之前'('预期的构造函数、析构函数或类型转换
- 错误:在“(”标记之前进行预期的构造函数、析构函数或类型转换.即使我有一个构造函数
- 模板类中的析构函数给出错误
- 在析构函数内取消引用指针时出现分段错误
- 模板化子类析构函数中的隔离错误
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 获取错误:在“(”标记之前进行预期的构造函数、析构函数或类型转换
- 显式调用类的析构函数时出现错误
- C++析构函数调用了错误的对象