今天在做国外题目时,碰到了一个问题,就是LVList类的私有成员中包含list对象,如果直接声明对象,不分配内存的话,后面对其访问就会报错。
最开始时,我是这样声明的:
template<typename K,typename V,int N>
class KVList
{
public:
KVList();
size_t size() const; //return number of key-value
const K& key(int i) const; //return unmodifiable reference to the key
const V& value(int i) const; //return modifiable reference to the value
KVList &add(const K&,const V&); //add a new element to the list
int find(const K& k) const; //return the index
KVList &replace(int i,const K&k,const V&v); //replace
private:
list<pair<K,V>> myList;
size_t num;
};
然后我再想对其初始化时,一直报错:
template<typename K,typename V,int N>
KVList<K,V,N>::KVList():myList(new list<pair<K,V>>(N))
{
num=0;
}
以前也碰到类似的问题,是vector,一直没解决,今天查了好多资料,终于搞定了,只需将list对象声明为指针形式就可以了:
template<typename K,typename V,int N>
class KVList
{
public:
KVList();
size_t size() const; //return number of key-value
const K& key(int i) const; //return unmodifiable reference to the key
const V& value(int i) const; //return modifiable reference to the value
KVList &add(const K&,const V&); //add a new element to the list
int find(const K& k) const; //return the index
KVList &replace(int i,const K&k,const V&v); //replace
private:
list<pair<K,V>> *myList;
size_t num;
};