vb的Treeview的新建节点总是说我类型不匹配,我是复制过来的原句,为什么?

vb的Treeview的新建节点总是说我类型不匹配,我是复制过来的原句,为什么?,第1张

可能是工作表中包含有易失性函数,打开后就会重新计算,所以会提示是否保存。

如新建一个工作簿,b1=offset(a1,,,,),保存并关闭,再打开,什么也不修改,再关闭时,就会提示是否保存。

易失性函数有许多,如offset/indirect/now/today等等。

我修改了一下,已经能运行了(见注释),但是对于一些特定的树,打印不出正确的结果。比如:

a/b/c//

我写了一个递归的遍历(结果正确),非递归的版本结果存在一些问题,你修改修改吧。

有问题可以给我发消息.Good Luck.

#include<iostream.h>

#include<malloc.h>

#define STACK_INIT_SIZE 100

#define STACKINCREMENT 10

typedef struct BiTNode

{

char d

struct BiTNode *lchild,*rchild

}BiTNode,*BiTree

typedef struct SqStack

{

// 因为这个stack是用来保存树的节点的,所以base和top的类型都应该是BiTree的指针.

BiTree *base,*top

int stacksize

}SqStack

void CreateTree(BiTree &T)

{

char ch

cin>>ch

if(ch=='/')

{

T=(BiTNode *)malloc(sizeof(BiTNode))

T->d=ch

// 建立树的时候,注意加上这两条语句

T->lchild = NULL

T->rchild = NULL

} else {

if(T=(BiTNode *)malloc(sizeof(BiTNode)))

{

T->d=ch

cout<<"请输入"<<T->d<<"的左孩子"<<endl

CreateTree(T->lchild)

cout<<"请输入"<<T->d<<"的右孩子"<<endl

CreateTree(T->rchild)

}

}

}

void InitStack(SqStack &S)

{

// 注意变量类型的修改

S.base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree*))

S.top=S.base

S.stacksize=STACK_INIT_SIZE

}

int SEmpty(SqStack S)

{

if(S.top==S.base){ // 这里 应该用 ==

return 1

}

return 0

}

void Push(SqStack &S,BiTree e)

{

if(S.top-S.base>=S.stacksize)

{

S.base=(BiTree*)realloc(S.base,(S.stacksize+STACKINCREMENT*sizeof(BiTree*)))

S.top=S.base+S.stacksize

S.stacksize+=STACKINCREMENT

}

//只是把两条语句分开写了

*S.top =e

S.top++

}

void Pop(SqStack &S,BiTree &e)

{

if(!SEmpty(S)){

//只是把两条语句分开写了

S.top--

e=*S.top

} else {

cout <<"stack is empty!\n"

}

}

// 我写的一个递归版的遍历

void MyPreOrderTraverse(BiTree T){

if ( T != NULL ){

cout <<T->d <<endl

} else {

return

}

cout <<"L:"

MyPreOrderTraverse(T->lchild)

cout <<"R:"

MyPreOrderTraverse(T->rchild)

}

/*

// 我修改的版本

void PreOrderTravere(BiTree T)

{

SqStack S

InitStack(S)

BiTree p

p=T

// 加了这个判断

if ( p == NULL ){

cout <<"the tree is not creat!\n"

return

}

// 修改为下面的形式

while(p)

{

cout<<p->d <<"->"

Push(S,p)

p=p->lchild

}

while ( !SEmpty(S) ){

Pop(S,p)

p=p->rchild

if ( p == NULL ) continue

cout<<p->d <<"->>"

p = p->lchild

// 打印p的孩子节点

while(p)

{

cout<<p->d <<"->"

Push(S,p)

p=p->lchild

}

}

}

*/

// 你的原来的版本

void PreOrderTravere(BiTree T)

{

SqStack S

InitStack(S)

BiTree p

p=T

while(p||!SEmpty(S))

{

if(p)

{

cout<<p->d<<"->"

Push(S,p)

p=p->lchild

}

else

{

Pop(S,p)//编译时这里出错,类型不匹配

cout<<p->d<<"->>"

p=p->rchild

}

}

}

void main()

{

BiTree t

cout<<"请输入树的根结点."<<endl

CreateTree(t)

PreOrderTravere(t)

cout <<"\n------------------------\n"

MyPreOrderTraverse(t)

cout<<"先序遍历完成."<<endl

}

如果在施耐德PLC编程软件中写程序时出现“硬件目录不匹配”的提示,可能是以下原因导致的:

1. PLC型号选择错误:在编写PLC程序时,需要选择正确的PLC型号。如果选择的PLC型号与实际使用的PLC不匹配,就会出现“硬件目录不匹配”的提示。

2. PLC配置错误:在编写PLC程序之前,需要正确配置PLC的硬件参数,例如输入输出模块数量、模块类型、通信模块等。如果配置错误,就会导致“硬件目录不匹配”的提示。

3. PLC与编程软件版本不匹配:有些PLC型号和编程软件之间有版本兼容性的问题,如果使用不兼容的版本进行编程,就会出现“硬件目录不匹配”的提示。

针对以上问题,可以尝试以下解决方法:

1. 检查PLC型号是否选择正确,并检查PLC配置是否正确。

2. 如果是版本不匹配的问题,可以尝试更新编程软件或者固件版本,使它们相互兼容。

3. 如果以上方法都不能解决问题,可以尝试重新安装编程软件,并根据官方文档进行正确配置和使用。

如果问题依然存在,可以查看编程软件的错误日志或联系相关技术支持人员进行帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11786045.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存