Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类赋值运算符重载_C++_Templates_Operator Overloading_Abstract Data Type - Fatal编程技术网

C++ 模板类赋值运算符重载

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

我在以下方面有点问题:

我正在为一些课程编写一个map抽象数据类型&我在尝试将我的类的一个对象(下面的MapEntry)分配给MapADT类中相同类型的数组时遇到了一个问题。它告诉我:

错误1错误C2679:二进制“=”:未找到接受“MapEntry*”类型的右操作数的运算符(或没有可接受的转换)c:\users\cross\u 000\documents\visual studio 2013\projects\objectorientedmethodsasignment1\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;
    }
};
#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);
    }
}