Перегрузка оператора присваивания класса шаблона

У меня небольшие проблемы со следующим:

Я пишу карту абстрактный тип данных для некоторых курсовых работ & Я столкнулся с проблемой при попытке назначить объект моего класса (MapEntry — ниже) массиву того же типа в классе MapADT. Это говорит мне, что:

Ошибка 1 ошибка C2679: двоичный файл ‘=’: не найден оператор, который принимает правый операнд типа ‘MapEntry *’ (или нет приемлемого преобразования) c: \ users \ cross_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;
}
};

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, но я не думаю, что это актуально. Если вам нужно увидеть все это, я могу добавить это.

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

чтобы решить вашу проблему.

0

Другие решения

В этой строке

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

Вы выделяете массив MapEntry<Tk, Tc>и конструкторы по умолчанию вызываются для всех них. Там нет необходимости в последующем for цикл вообще, вы должны просто написать правильную инициализацию в MapEntry::MapEntry(), который в настоящее время пуст.

0

По вопросам рекламы [email protected]