模板类赋值运算符重载
Template Class Assignment Operator Overloading
我在以下方面遇到了一点麻烦:
我正在为一些课程编写地图抽象数据类型,并且在尝试将我的类(MapEntry - 下图)的对象分配给类 MapADT 中相同类型的数组时遇到了一个问题。它告诉我:
错误1 错误 C2679:二进制"=":找不到采用类型为"MapEntry *"的右侧操作数的运算符(或者没有可接受的转换) c:\users\cross_000\documents\Visual Studio 2013\projects\objectoriented methodsasignment1\mapadt\mapadt.h 14
所以我想我会编写自己的赋值运算符覆盖。我已经在 MapEntry 类定义中完成了此操作,但是当我尝试在 MapADT 上的构造函数中初始化数组时,编译器似乎无法识别它 - 如下。
任何帮助将不胜感激。
#pragma once
template <class Tk, class Tc>
class MapEntry
{
private:
Tk key;
Tc contents;
bool isPopulated;
public:
MapEntry() {
}
MapEntry(Tk keyInput, Tc contentsInput) {
key = keyInput;
contents = contentsInput;
isPopulated = true;
}
MapEntry(Tk keyInput, Tc contentsInput, bool isPopulatedInput) {
key = keyInput;
contents = contentsInput;
isPopulated = isPopulatedInput;
}
~MapEntry() {
//TODO
}
Tk getKey() {
return key;
}
void setKey(Tk keyInput) {
key = keyInput;
}
Tc getContents() {
return contents;
}
void setContents(Tc contentsInput) {
contents = contentsInput;
}
bool getIsPopulated() {
return isPopulated;
}
void setIsPopulated(bool isPopulatedInput) {
isPopulated = isPopulatedInput;
}
MapEntry<Tk, Tc>& operator=(const MapEntry<Tk, Tc> & lst)
{
clear();
copy(lst);
return *this;
}
};
MapADT.h
#pragma once
#include "MapEntry.h"
template <class Tk, class Tc>
class MapADT
{
private:
int mapSize = 1000;
MapEntry<Tk, Tc> *map;
public:
MapADT() {
map = new MapEntry<Tk, Tc>[mapSize];
for (int i = 0; i < mapSize; i++) {
map[i] = new MapEntry<Tk, Tc>(NULL, NULL, false);
}
}
}
MapADT类还有更多内容,但我认为它无关紧要。如果您需要查看整个内容,我可以添加它。
map[i]
不是指向MapEntry
的指针。
不确定是否要
map[i] = MapEntry<Tk, Tc>(NULL, NULL, false);
或
MapEntry<Tk, Tc>** map;
MapADT() {
map = new MapEntry<Tk, Tc>*[mapSize];
for (int i = 0; i < mapSize; i++) {
map[i] = new MapEntry<Tk, Tc>(NULL, NULL, false);
}
}
以解决您的问题。
在这一行中
map = new MapEntry<Tk, Tc>[mapSize];
你分配一个MapEntry<Tk, Tc>
数组,并为所有这些数组调用默认构造函数。在后续的for
循环中根本不需要,您应该在当前为空的 MapEntry::MapEntry()
中编写正确的初始化。
相关文章:
- 为什么初始化时没有调用重载赋值运算符?
- 在类外重载赋值运算符
- 重载赋值运算符函数和复制构造函数中的错误
- 为多个签名使用相同的代码重载赋值运算符?
- 错误消息:使用复制构造函数和重载赋值运算符
- 类模板中的重载赋值运算符
- C++库类的重载赋值运算符
- 为什么为单个赋值操作调用复制构造函数和重载赋值运算符
- 如何重载赋值运算符以满足 ob1=ob2=ob3(ob1,ob2,ob3 是同一类的对象)
- 带有非类型参数的C++模板类:如何重载赋值运算符
- C++重载赋值运算符在不相关的类中被调用
- C++重载赋值运算符声明中做什么?
- 在c++中操作重载赋值运算符
- 如何避免重载赋值运算符将右值转换为左值
- 重载赋值运算符的问题
- 复制构造函数、重载赋值运算符和deepCopy
- 重载赋值运算符带下标运算符
- 如何在不重载赋值运算符的情况下运行此代码
- 重载赋值运算符 - 多态容器
- 如何重载赋值运算符以允许我的类等于基元类型,例如'int'