错误:与 '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
类中的继承类型 A
和 B
时遇到了问题。我收到了错误
|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<T,SIZE>::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;
DATA
是T
的数组,而不是A<T,SIZE>
。
试试这个
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[]”不匹配(操作数类型为“QVector<int>”和“QCharRef”)
错误:'boost::filesystem::path::filename() const() + "/"' 中的'operator+' 不匹配