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 错误