获取虚拟析构函数的重新定义错误 我有以下C++片段: #include <iostream> using namespace std; class A { public: virtual ~A() { } }; A::~A() { } int main(int argc, char * argv []) { return 0; }
您将定义析构函数两次—一次在类中内联,一次在类外部。例如,您需要将内联定义更改为仅声明:获取虚拟析构函数的重新定义错误 我有以下C++片段: #include <iostream> using namespace std; class A { public: virtual ~A() { } }; A::~A() { } int main(int argc, char * argv []) { return 0; },c++,C++,您将定义析构函数两次—一次在类中内联,一次在类外部。例如,您需要将内联定义更改为仅声明: virtual ~A(); 只需在课堂上使用以下内容 virtual ~A(); 而不是 virtual ~A() { } 编译器实际上是在确切地告诉您这里的问题是什么。您有两个实现—一个在类中内联,另一个在类外部 A::~A() { } 这是类定义中析构函数的定义 class A { public: v
virtual ~A();
只需在课堂上使用以下内容
virtual ~A();
而不是
virtual ~A()
{
}
编译器实际上是在确切地告诉您这里的问题是什么。您有两个实现—一个在类中内联,另一个在类外部
A::~A()
{
}
这是类定义中析构函数的定义
class A
{
public:
virtual ~A()
{
}
};
这也是类定义之外的析构函数定义
A::~A()
{
}
所以您定义了两次析构函数,编译器报告了这个错误
可以用以下方法在类中定义析构函数
class A
{
public:
virtual ~A() = default;
};
声明和定义之间存在差异。C++遵循以下的方式,即:<强>您只需要定义一次“< /强> ”
- Declaration=让世界知道存在一些东西,以及参数/返回类型是如何存在的
- Definition=为该函数/类/对象/任何对象编写实际代码
#include <iostream>
using namespace std;
class A
{
public:
virtual ~A() < - declares a virtual destructor
{ <- defines the code (nothing) for the virtual destructor
}
};
A::~A() <- defines the code AGAIN for the virtual destructor of the class A
{
}
int main(int argc, char * argv [])
{
return 0;
}
#包括
使用名称空间std;
甲级
{
公众:
virtual~A()<-声明一个虚拟析构函数
{错误是不言自明的-您有两个析构函数的实现将virtual~A(){}更改为virtual~A();
#include <iostream>
using namespace std;
class A
{
public:
virtual ~A() < - declares a virtual destructor
{ <- defines the code (nothing) for the virtual destructor
}
};
A::~A() <- defines the code AGAIN for the virtual destructor of the class A
{
}
int main(int argc, char * argv [])
{
return 0;
}
#include <iostream>
using namespace std;
class A
{
public:
virtual ~A()
{
printf("World?");
}
};
A::~A()
{
printf("Hello?");
}