我使用链表来实现set类。为了从用户隐藏我的struct Node,我将struct Node声明置于私有中。此外,我重载了operator +,它表示两组之间的联合操作。因为我想通过递归来实现它,所以我在名为unionMerge的私有字段中重载了operator +。但是,它产生了一个错误“错误:'unionMerge'未在此范围内声明”,但我确实将unionMerge声明放在了set.cpp文件中的operator +之上。有人可以帮助我吗?
Set.h是一个接口文件。 Set.cpp是接口的实现。
这是接口文件,Set.h:
#ifndef SET_H
#define SET_H
#include <iostream>
using namespace std;
class Set{
public:
Set();
friend const Set operator+(const Set& a, const Set& b);
private:
struct Node{ //private Node
int value;
Node* next;
};
Set(Node *p); //private constructor
Node* list;
//overload the public operator+ above
static Node* unionMerge(const Node* p, const Node *q);
};
#endif
这是实现文件Set.cpp:
#include <iostream>
#include "Set.h"
Set::Set():list(nullptr){
}
Set::Set(Node* p){
list = p;
}
Set::Node* Set::unionMerge(const Node *p, const Node *q){
// to debug, I return nullptr
return nullptr;
}
const Set operator+(const Set& a, const Set& b){
//error: ‘unionMerge’ was not declared in this scope
return Set(unionMerge(a.list,b.list));
Set::Node *p = unionMerge(a.list,b.list);
Set s;
s.list = p;
return s;
}
答案 0 :(得分:3)
operator+()
不是Set
的成员(朋友不是成员),因此如果您想访问Set
的静态成员,则必须符合条件:
return Set(Set::unionMerge(a.list,b.list));