获取虚拟析构函数的重新定义错误 我有以下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=为该函数/类/对象/任何对象编写实际代码

在代码中有两个定义和一个声明。违反ODR的:

#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?");
}