我的代码有问题。我收到错误" AssociativeArray> :: Node :: Node(void)':尝试引用已删除的函数"
这是我的班级
template<typename K, typename V>
class AssociativeArray
{
public:
AssociativeArray(int = 2); // default constructor of a capacity of 2
AssociativeArray(){ delete [] data; }
AssociativeArray(const AssociativeArray<K,V>&);
AssociativeArray<K,V>& operator=(const AssociativeArray<K,V>&);
V& operator[](const K&); // getter
V operator[](const K&) const; // setter
queue<K> keys() const;
int size() const {return siz;};
bool containsKey(const K&) const;
void deleteKey(const K&);
void clear();
private:
int cap;
int siz;
int values;
void capacity(int);
struct Node{K key; V value; bool inUse;};
Node* data; // data = new Node[cap]
void ExpandNode(int,int);
};
这是给我问题的构造函数。
template<typename K, typename V>
AssociativeArray<K, V>::AssociativeArray(int cap)
{
this->cap = cap;
this->siz = 0;
data = new Node[cap]; // ERRORS HERE
for (int index = 0; index < cap; index++)
{
data[index].inUse = false;
}
}
以下是main中的声明。
AssociativeArray<string, AssociativeArray<string, bool>> seen(10);
答案 0 :(得分:1)
问题是没有析构函数。我忘了在“AssociativeArray(){delete [] data;}前面添加〜”因此我怀疑我有2个构造函数,它正在调用删除数据数组的构造函数。
答案 1 :(得分:0)
Node
班级&#39;当您创建Node
的原始数组时,默认构造函数用于每个项目。
由于某种原因,没有这样的默认构造函数。据推测,Key
成员缺少默认构造函数。但是,您没有显示代码,因此关于原因仅仅是推测。
创建数组而不调用项类型的默认构造函数的一种好方法是使用std::vector
。或者,如果这样做有意义,那么您可以只定义一个默认构造函数。但是使用std::vector
也可以处理许多其他问题,所以我建议你不管怎么做。