错误:'operator ='不匹配。试图从基类继承并从基类初始化?

时间:2013-07-31 07:45:47

标签: c++ inheritance polymorphism operator-overloading

我正在尝试声明一个名为BASE的基类,但我在使用A类中的继承类型BBASE时遇到了问题。我收到了错误

|In member function 'NODE& NODE::operator=(const NODE&)':|
16|warning: no return statement in function returning non-void|
In member function 'void BASE<T, SIZE>::init_A(int) [with T = NODE, unsigned int SIZE = 2u]':|
96|instantiated from here|
39|error: no match for 'operator=' in 'A<NODE, 2u>::DATA[index] = a'|
13|note: candidates are: NODE& NODE::operator=(const NODE&)|


#include <iostream>

class NODE
{
        private:

        public:

        NODE(){}
        ~NODE(){}

};

template <class T, size_t SIZE>
class A;
template <class T, size_t SIZE>

class BASE
{
    protected:

        static T DATA[SIZE];

    public:

        BASE()
        {

        }
        ~BASE(){}
        void init_A(int index)
        {                       
            A<T,SIZE>::DATA[index] = T();            
        }        
};
template <class T, size_t SIZE>
class A : public BASE<T,SIZE>
{
     protected:         

    public:


        A(){}
        ~A(){}

};

template <class T, size_t SIZE>
T BASE<T,SIZE>::DATA[SIZE] = {};
int main()
{
    BASE<NODE,2> base;

    base.init_A(0);    

    return 0;
}

1 个答案:

答案 0 :(得分:2)

我可以让它编译,但它可能不会做你想要的。 第一个问题是你赋予运营商承诺返回的东西而不是:

NODE& NODE::operator=(const NODE&)
{

}

试试这个

NODE& NODE::operator=(const NODE&)
{
    return *this;
}

第二个问题是

A<T,SIZE> a;
A<T,SIZE>::DATA[index] = a;

DATAT的数组,而不是A<T,SIZE>。 试试这个

A<T,SIZE>::DATA[index] = T();

最后你需要在某处声明你的静力学。
最后,您需要在某处定义静态。请参阅here