我遇到以下问题:
我正在为某些课程编写地图抽象数据类型&我尝试将类的对象(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课程还有更多内容,但我认为它不相关。如果您需要查看整个内容,我可以添加它。
答案 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);
}
}
解决您的问题。