C++老是报错error C2248: 'left' : cannot access private member declared in class 'BinNode'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++老是报错error C2248: 'left' : cannot access private member declared in class 'BinNode'相关的知识,希望对你有一定的参考价值。

#include<iostream.h>
#include<string>
int top=0;
int hight=0;
int hl=0;
int hr=0;
class BinNode
private:
int element;
BinNode* left;
BinNode* right;
public:
BinNode()

left=right=NULL;

BinNode (int e,BinNode* l=NULL,BinNode* r=NULL)

element=e;
left=l;
right=r;

~BinNode()

BinNode* leftchild()

return left;

BinNode* rightchild()

return right;


int value()

return element;

void setvalue(int val)

element=val;

bool isleaf()

return(left==NULL)&&(right==NULL);

;
struct tree

BinNode * node;
;
tree stack[200];
void CreatTH(BinNode* h)
int n,left,right;
int la[100];
cout<<"创建表"<<endl;
cout<<"输入元素个数为:";
cin>>n;
for(int i=0;i<n;i++)

cout<<"输入第"<<i+1<<"个数据:"<<endl;
cin>>la[i];
stack[i].node=new BinNode(la[i],NULL,NULL);
for(int j=0;j<(n);j++)

stack[j].node->left=stack[2*j+1].node;
stack[j].node->right=stack[2*j+2].node;

int Max,Min;
Max=stack[0].node->element;
Min=stack[0].node->element;
for(int x=1;x<n;x++)

if(stack[x].node->element>Max)
Max=stack[x].node->element;
if(stack[x].node->element<Min)
Min=stack[x].node->element;

cout<<"最大值:"<<Max<<endl;
cout<<"最小值:"<<Min<<endl;
;
void preorder(Binnode * rt)

if(rt==NULL)return;
int a ;
a=rt->value();
cout<<a;
preorder(rt->leftchild());
preorder(rt->rightchild());

void inorder(Binnode * rt)

if(rt==NULL)return;
inorder(rt->leftchild());
int a;
ch=rt->value();
cout<<a;
preorder(rt->rightchild());

void postorder(Binnode * rt)

if(rt==NULL)return;
inorder(rt->leftchild());
preorder(rt->rightchild());
int a;
ch=rt->value();
cout<<a;

void TH(Binnode * rt)

if(rt==NULL)

hl=hight;

else

top++;
TH(rt->leftchild());

if(rt==NULL)

hr=hight;

else

cop++;
TZ(rt->rightchild());

if(hl>=hr)

cout<<hl<<endl;

else

cout<<hr<<endl;
;
void main()

Binnode *root;
CreatBT(root);
root=stack[0].node;
cout<<"------前序遍历------ "<<endl;
preorder(root);
cout<<endl;
cout<<"------中序遍历------ "<<endl;
inorder(root);
cout<<endl;
cout<<"------后序遍历------ "<<endl;
postorder(root);
cout<<endl;
cout<<"树高"<<endl;
TH(root);
root=stack[0].node;
cout<<endl;

谢啦,那个问题解决了,但是还是运行不出来有点小问题。为了交作业,现在能运行出来就行,安全先不考虑了。那个改到Public里面去了,还有点小错误: error C2601: 'main' : local function definitions are illegal :
fatal error C1004: unexpected end of file found
应该是说括号匹配的问题吧,但是我自己我看没问题了啊

这个错误是说你调用了私有的成员变量。
你的void CreatTH(BinNode* h)里用了Max=stack[0].node->element;这样的语句。
在BinNode里定义的int element是属于私有的,不能直接调用的。你可以在BinNode类里加一个成员函数,像
int GetElement()

return element;

然后把所有的element换成GetElement()就可以了~
或者为了简单就直接把private的变量变成public也可以
你可以把int element移到public里,这样程序的其他地方就不用动了,但是最好不要这么做了,有一些security issue~
呵呵,不知道帮没帮上忙~
参考技术A 派生类的成员无法访问基类的 private 成员。 您无法访问类实例的 private 或 protected 成员。 参考技术B 那个提示很明显啊,就是因为类里面那几个私有成员,不能在类的外部被其他函数引用。。比如这行:stack[j].node->left=stack[2*j+1].node;
具体就根据编译器的提示改就OK了
参考技术C left是私有成员,不能在类public函数成员或者friend函数以外的地方被访问的,creatTH里面访问了私有成员!

转linux configure报错configure: error: C++ preprocessor “/lib/cpp” fails sanity 的解决办法

/lib/cpp fails sanity check的解决

  在某些软件的时候,运行./configure 会报错,错误提示为:

  configure: error: C++ preprocessor “/lib/cpp” fails sanity 
  check See `config.log’ for more details

  解决办法:出现该情况是由于c++编译器的相关package没有安装,以root用户登陆,在终端上执行:

  # yum install glibc-headers

  # yum install gcc-c++

 

【转】:http://www.cnblogs.com/niocai/archive/2011/11/04/2236458.html

以上是关于C++老是报错error C2248: 'left' : cannot access private member declared in class 'BinNode'的主要内容,如果未能解决你的问题,请参考以下文章

派生类成员函数调用时 error C2248: 无法访问 protected 成员 的排雷之路

用python进行socket编程老是报错error: [Errno 10061] 怎么回事啊??好心人帮帮忙啊!!在线等!谢了

在 Visual Studio 2012 中编译启用 CLR 的 C++ 项目时出现 C2248 错误

我的电脑老是弹出 run-time error '94' 是怎么回事?

QT-MSVC 错误 C2248

以下SQL中语句,为啥老是报错( '*' 附近有语法错误)??