C++ 模板类赋值运算符重载
我在以下方面有点问题: 我正在为一些课程编写一个map抽象数据类型&我在尝试将我的类的一个对象(下面的MapEntry)分配给MapADT类中相同类型的数组时遇到了一个问题。它告诉我: 错误1错误C2679:二进制“=”:未找到接受“MapEntry*”类型的右操作数的运算符(或没有可接受的转换)c:\users\cross\u 000\documents\visual studio 2013\projects\objectorientedmethodsasignment1\mapadt\mapadt.h 14 所以我想我会写我自己的赋值运算符重写。我已经在MapEntry类定义中这样做了,但是当我尝试在下面的MapADT上的构造函数中初始化数组时,编译器似乎无法识别它 任何帮助都将不胜感激C++ 模板类赋值运算符重载,c++,templates,operator-overloading,abstract-data-type,C++,Templates,Operator Overloading,Abstract Data Type,我在以下方面有点问题: 我正在为一些课程编写一个map抽象数据类型&我在尝试将我的类的一个对象(下面的MapEntry)分配给MapADT类中相同类型的数组时遇到了一个问题。它告诉我: 错误1错误C2679:二进制“=”:未找到接受“MapEntry*”类型的右操作数的运算符(或没有可接受的转换)c:\users\cross\u 000\documents\visual studio 2013\projects\objectorientedmethodsasignment1\mapadt\map
#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;
}
};
#pragma一次
样板
类映射条目
{
私人:
Tk键;
Tc含量;
布尔是人口密集型;
公众:
MapEntry(){
}
映射条目(Tk键输入,Tc内容输入){
键=键输入;
contents=contentsInput;
isPopulated=真;
}
映射条目(Tk键输入、Tc内容输入、布尔值为人口输入){
键=键输入;
contents=contentsInput;
isPopulated=isPopulatedInput;
}
~MapEntry(){
//待办事项
}
Tk getKey(){
返回键;
}
无效设置键(Tk键输入){
键=键输入;
}
Tc getContents(){
返回内容;
}
无效设置内容(Tc内容输入){
contents=contentsInput;
}
bool getIsPopulated(){
返回人口不多;
}
void setIsPopulated(bool isPopulatedInput){
isPopulated=isPopulatedInput;
}
MapEntry和运算符=(常量MapEntry和lst)
{
清除();
副本(lst);
归还*这个;
}
};
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);
}
}
}
#pragma一次
#包括“MapEntry.h”
样板
类MapADT
{
私人:
int mapSize=1000;
地图输入*地图;
公众:
MapADT(){
地图=新地图条目[mapSize];
对于(int i=0;i
MapADT类还有更多内容,但我认为这并不相关。如果您需要查看整个内容,我可以将其添加到这一行。
map = new MapEntry<Tk, Tc>[mapSize];
map=newMapEntry[mapSize];
您分配了一个
MapEntry
数组,并为它们调用默认构造函数。对于循环,在后续的中根本不需要,您只需在当前为空的MapEntry::MapEntry()
中编写适当的初始化。map[i]
不是指向MapEntry
的指针
不知道你是否想要
map[i] = MapEntry<Tk, Tc>(NULL, NULL, false);
map[i]=MapEntry(NULL,NULL,false);
或
MapEntry**map;
MapADT(){
地图=新地图条目*[mapSize];
对于(int i=0;i
来解决您的问题。map[i]
属于Tc
类型,但您尝试为其分配一个MapEntry
,非常感谢Jarod。我之前尝试过这个,IDE没有在观察列表中给我反馈,我有一个填充了项目的数组(我猜它不支持显示来自指针数组的信息),但是如果我以编程方式从数组指向的对象输出,它似乎可以工作!谢谢安东,我也试过你的版本,也很管用。因此,感谢您抽出时间回复。
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);
}
}