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

Posted

技术标签:

【中文标题】错误:与 \'operator=\' 不匹配。试图从基类继承并从基类初始化?【英文标题】:error: no match for 'operator=' . Trying to inherit from base class and initialize from base class?错误:与 'operator=' 不匹配。试图从基类继承并从基类初始化? 【发布时间】:2013-07-31 07:45:46 【问题描述】:

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

|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;

【问题讨论】:

A&lt;T,SIZE&gt;::DATA[index] = a;void init_A(int index); 我尝试了不同的方法来使它工作。很抱歉到处都是cmets。 NODE::operator=(...) 中以return ( *this ); 开头。 【参考方案1】:

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

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



试试这个

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

    return *this;

第二个问题是

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

DATAT 的数组,而不是A&lt;T,SIZE&gt;。 试试这个

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

最后你需要在某处声明你的静态数据。 罢工> 最后你需要在某处定义你的静态参数。见here

【讨论】:

***.com/questions/3229883/… 但请注意其他事情会出错 - 目前尚不清楚您要做什么。如果您进一步卡住,请回来提出一个新问题 为什么他们都有自己的静态数据?即静态 T DATA[SIZE] 在 3 个地方 他需要在某处定义他的静态成员。它们在类定义中声明。 @JamesKanze 谢谢:一个thinko - 我如何做标记来划掉一些东西? @lost_with_coding 是“编辑”了一个新问题。因为没有问题

以上是关于错误:与 'operator=' 不匹配。试图从基类继承并从基类初始化?的主要内容,如果未能解决你的问题,请参考以下文章

C ++重载:[错误]'operator ='不匹配(操作数类型是'String'和'String')[重复]

如何完全绕过`错误:不匹配'operator =='`?

错误:“operator[]”不匹配(操作数类型为“QVector<int>”和“QCharRef”)

错误:'boost::filesystem::path::filename() const() + "/"' 中的'operator+' 不匹配

Valarray 切片数组与 'operator*' 不匹配

C ++向量 - 查找(“'operator =='不匹配”)