#ifndef SLIST_H
#define SLIST_H
#include "llist.h"
using namespace std;
class slist:public llist{
public:
slist();
int search(el_t Key);
void replace(el_t Elem, int I);
};
#endif
这是我刚刚创建的新类,它在llist.h中包含的所有继承函数之上提供了搜索和替换函数。
在我的主...
#include "slist.h"
#include <iostream>
using namespace std;
int main(){
slist list;
list.addFront(4);
cout<<list.search(4);
}
我正在尝试调用addfront(),它是llist类中的公共函数。然后我想调用search(),它是slist类的继承公共函数。 g ++给了我一些我不理解的错误。
slist.h: In function âint main()â:
slist.h:10: error: âslist::slist()â is protected
main.cpp:7: error: within this context
slist()受到保护?为什么?我把它公之于众:
还有这个背景,我猜我只是把整个继承完全错了。任何帮助将不胜感激!
编辑:这是llist类,如果它有帮助
#ifndef LIST_H
#define LIST_H
#include <iostream>
using namespace std;
class llist{
protected:
typedef int el_t;
el_t total;
struct Node{
int Elem;
Node *Next;
};
Node *Front;
Node *Rear;
Node * Curr;
public:
class Overflow{};
class Underflow{};
class Range{};
llist();
~llist();
bool isEmpty();
void displayAll();
void addRear(el_t NewNum);
void deleteFront(el_t& OldNum);
void addFront(el_t NewNum);
void deleteRear(el_t& OldNum);
void deleteIth(int I, el_t& OldNum);
void addbeforeIth(int I, el_t newNum);
class Overflow;
};
#endif
#include "llist.h"
#include <iostream>
using namespace std;
int total=0;
llist::llist(){
Front=NULL;
Rear=NULL;
total=0;
}
llist::~llist(){
while(Front!=NULL){
int z;
deleteFront(z);
}
}
bool llist::isEmpty(){
if(Front==NULL){
return true;
}
return false;
}
void llist::displayAll(){
Curr=Front;
if(isEmpty()){
cout<<"[ empty ]"<<endl;
}else{
while(Curr!=NULL){\
cout<<"curr != NuL"<<endl;
cout<<Curr->Elem<<endl;
Curr=Curr->Next;
}
}
}
void llist::addFront(el_t NewNum){
if(isEmpty()){
Node *x=new Node;
x->Next=Front;
Rear=Front;
Front=x;
Front->Elem=NewNum;
}else{
Node *x=new Node;
x->Next=Front;
Front=x;
Front->Elem=NewNum;
++total;
}
}
答案 0 :(得分:1)
老实说,我看不出问题,但并不是每个编译器都符合标准,所以我会尝试以下方法:
1)重命名你的课程 - 如果它有效,那就意味着这是因为命名冲突。
2)删除using指令。
3)删除继承。如果它在此之后工作......你真的需要改变编译器。
4)在课堂申报前尝试#undef public
。如果它在此之后有效......好吧,有人在和经理谈谈。
5)祈祷......