我收到此错误,我不知道该怎么做。 所以我有一个链表,我正在尝试制作段功能。
class Set()
{
public:
struct Node
{
int value;
Node *next;
Node(int e, Node *n) : value(e),next(n){};
};
enum Exceptions{EMPTYSET, FULLMEM, REPLICA};
Set() : _head(NULL){}
Set(const Set& s);
Set& operator=(const Set& s);
~Set();
void pop(int e);
void ext(int e);
bool contains(int e);
bool empty() const {return _head==NULL;}
friend Set unio (const Set& a, const Set& b);
friend Set segment (const Set& a, const Set& b);
friend std::ostream& operator<< (std::ostream& s, Set& a);
private:
Node *_head;
}
我试过的是:
Set segment(const Set& a,const Set& b)
{
Set c;
Set::Node *p = a._head;
while(p!=NULL){
if(b.contains(p->value)){
c.ext(p->value);
}
p=p->next;
}
return c;
}
ext 函数将一个元素放入集合中:
void Set::ext(int e)
{
try
{
Node *p = _head;
Node *pe = NULL;
Node *q = new Node(e,NULL);
while( p!=NULL && p->value < e)
{
pe = p;
p = p->next;
}
if(pe==NULL)
{
q->next =_head;
_head = q;
}else
{
q->next = p;
pe->next = q;
}
}catch (std::bad_alloc o)
{
throw FULLMEM;
}
}
如果元素在集合中,则 contains 函数返回true。
bool Set::contains(int e)
{
Node *p = _head;
while(p!=NULL){
if(p->value == e)
return true;
p=p->next;
}
return false;
}
整个错误信息是:
||In function 'Set segment(const Set&, const Set&)':|
error: passing 'const Set' as 'this' argument of 'bool Set::contains(int)' discards qualifiers [-fpermissive]|
答案 0 :(得分:0)
您可以将contains
声明为const
函数:
class Set {
...
bool contains(int e) const;
...
}
bool Set::contains(int e) const {
...
}
虽然您正在使用它,但您应该对empty()
执行相同操作。
有关背景阅读,请参阅Meaning of "const" last in a C++ method declaration?