C++ 在c+中具有设定值的映射+;

C++ 在c+中具有设定值的映射+;,c++,map,set,C++,Map,Set,当我试图打印映射的值时遇到问题,这是一个集。 我必须实现Map和Set的所有功能(没有使用Map或Set库),但我确信它们可以正常工作。printSet函数正在工作 简要列举我拥有的功能: #define SType string #define VType set struct setNode { SType key; setNode* left; setNode* right; setNode* parent; }; class set { public: set(

当我试图打印
映射的值时遇到问题,这是一个
。 我必须实现
Map
Set
的所有功能(没有使用
Map
或Set库),但我确信它们可以正常工作。printSet函数正在工作

简要列举我拥有的功能:

#define SType string
#define VType set

struct setNode {
  SType key;
  setNode* left;
  setNode* right;
  setNode* parent;
};

class set {
 public:
  set();
  bool empty();
  int size();
  setNode* begin();
  setNode* end();
  setNode* next(setNode* x);
  setNode* prev(setNode* x);
  SType key(setNode* x);
  setNode* find(SType k);
  void insert(SType k);
  void erase(SType k);
  void clear();
  void operator=(set& s);
  ~set();

 private:
  int size_;
  setNode* root_;
};

struct mapNode {
  SType key;
  VType value;
  mapNode* left;
  mapNode* right;
  mapNode* parent;
};

class map {
 public:
  map();
  bool empty();
  int size();
  mapNode* begin();
  mapNode* end();
  mapNode* next(mapNode* x);
  mapNode* prev(mapNode* x);
  VType& operator[](SType k);
  SType key(mapNode* x);
  VType value(mapNode* x);
  mapNode* find(SType k);
  void insert(SType k, VType v);
  void erase(SType k);
  void clear();
  void operator=(map& s);
  ~map();

 private:
  int size_;
  mapNode* root_;
};
现在,打印功能:

void printSet(set& c) {

  for (setNode* i = c.begin(); i != c.end(); i = c.next(i)) {
    cout << c.key(i) << " ";
  }
}

void printMap(map& m){
    for (mapNode* i = m.begin(); i != m.end(); i = m.next(i)) {
    cout<<m.key(i)<<"\t";
    printSet(m.value(i));//error in this line
    cout<<endl;
  }
}
void打印集(set&c){
for(setNode*i=c.begin();i!=c.end();i=c.next(i)){
cout问题是
value(mapNode*x)
返回
VType
这是一个临时值。 另一方面,
void printSet(set&c)
通过引用获取变量

这意味着您正试图存储和访问一个非法的临时值

将打印功能更改为:

void printSet(const set& c) 
void printMap(const map& m)
此外,您不能在其常量变量中使用map类的none const成员,因此您还必须使begin end key next value
const

class map {
 public:
  map();
  bool empty()const ;
  int size()const ;
  mapNode* begin()const;
  mapNode* end()const;
  mapNode* next(mapNode* x)const;
  mapNode* prev(mapNode* x)const;
  ...
 }

你为什么用#define而不是
typedef
使用
?!我不知道我能