模板类分配运算符重载

时间:2014-11-27 13:23:00

标签: c++ templates operator-overloading abstract-data-type

我遇到以下问题:

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

错误1错误C2679:二进制'=':找不到哪个运算符采用'MapEntry *'类型的右手操作数(或者没有可接受的转换)c:\ users \ cross_000 \ documents \ visual studio 2013 \ projects \ objectorientedmethodsasignment1 \ mapadt \ mapadt.h 14

所以我想我会编写自己的Assignment操作符覆盖。我已经在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课程还有更多内容,但我认为它不相关。如果您需要查看整个内容,我可以添加它。

2 个答案:

答案 0 :(得分:0)

在这一行

map = new MapEntry<Tk, Tc>[mapSize];

分配一个MapEntry<Tk, Tc>数组,并为所有这些数组调用默认构造函数。在后续的for循环中根本不需要,你应该在MapEntry::MapEntry()中编写正确的初始化,当前是空的。

答案 1 :(得分:0)

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

解决您的问题。