C++错误: declaration of ‘~Destructor’ as member of ‘Class’

标签 c++ g++

我使用g++ -Wall -Werror *.cpp进行编译并得到错误:

ConcreteCharArray.h:21:15:错误:将“~CharArray”声明为“ConcreteCharArray”的成员

具体实现:

class ConcreteCharArray: public CharArray
{
private:
    char * charArray;
public:
   ~CharArray() {
      delete[] string;
   }
};

虚拟类:

class CharArray
{
public:
   virtual ~CharArray() {};
};  

最佳答案

在名为 ConcreteCharArray 的类中声明名为 ~CharArray 的成员是非法的,这是编译器告诉您的。 ~ 的存在表明您正在声明一个析构函数,并且析构函数的名称必须与类的名称匹配。

析构函数是特殊成员函数。它们的特殊属性之一是,为了重写基类的虚拟析构函数,您不必匹配派生类中该析构函数的名称(就像通常对普通成员函数所做的那样)。编译器会自动将析构函数相互匹配,即使它们的名称不同。这很容易做到,因为每个类都有一个且只有一个析构函数。

因此,如果您想在类 ConcreteCharArray 中声明析构函数,则必须调用该析构函数 ~ConcreteCharArray。没有其他选择。即使派生析构函数的名称与基析构函数的名称不同,派生析构函数也将被视为虚拟析构函数并覆盖基析构函数。

关于C++错误: declaration of ‘~Destructor’ as member of ‘Class’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808151/

相关文章:

c++ - 如何从 std::function 获取这个指针?

c++ - 直接使用成员函数与 unordered_set

c++ - 此功能可能有什么问题或不正确?

CMAKE:在 clang/g++ 和 libc++/libstdc++ 之间切换

c++ - Multi CURL C++ 在准备就绪时不断提供新的处理程序

c++ - 编译器不知道我的包含文件

c++ - "Undefined reference"到定义的构造函数

c++ - 使用 G++ 编译器的 strncpy_s

c++ - 在没有 -fPIC 的情况下将静态库链接到共享库

c++ - 是什么导致调试 session 中出现 Sigtrap