-1

test.h

class A
{
    public:
        virtual void FunctionA(void) = 0;
        virtual ~A(void);
};
class B
{
    public:
        virtual void FunctionB(void) = 0;
        virtual ~B(void);
};
class C:public A, public B 
{
    public:
        virtual ~C(void) = 0;
};

test.cpp

#include "test.h"
inline A::~A(void){}
inline B::~B(void){}
inline C::~C(void){}

C4505 'C:~C' :unreferenced local function has been removed という警告が表示されるのはなぜですか?

4

2 に答える 2

0

関数を純粋に宣言してクラス本体で定義することはできません。これは正当な構文ではありません。コンパイラがそれを意味すると考えているという警告が何を意味するのかわかりません。

代わりに、このようなことを行う必要があります (すべての純粋な仮想デストラクタに対して)。

class A {
public:
    virtual void FunctionA() = 0;
    virtual ~A() = 0;
};
inline A::~A() {}

または、とにかく各クラスに少なくとも1つの別の純粋仮想関数があるため、この場合、デストラクタを純粋仮想にする本当のメリットはないので、(クラス本体で)行うことができます:

virtual ~A() {}

編集:また、およびの戻り値の型 (例: void)が必要です。A::FunctionA()B::FunctionB()

于 2012-06-09T15:54:29.123 に答える