回 帖 发 新 帖 刷新版面

主题:从“void*”到指向非“void”的指针的转换要求显式类型转换

[code=c]
#include<stdio.h>
#include<malloc.h>
#include<string.h>

void e();
void f();
void t();
void t1();
void e1();

struct Lchar
{
    char char_ch;
    struct Lchar *next;
}Lchar,*p,*h,*temp;

char ch;
int right;


void e(void)
{
     t();
     e1();
}


void t(void)
{
     f();
     t1();
}


void t1(void)
{
      if(h->char_ch=='*')
  {
           h=h->next;
           f();
           t1();
  }
      else
           if(h->char_ch!='#'&&h->char_ch!=')'&&h->char_ch!='+')
                 right=0;
}


void e1(void)
{
    if(h->char_ch=='+')
{
         h=h->next;
         t();
         e1();
}
    else
         if(h->char_ch=='#'||h->char_ch==')')
             return;
         else
             right=0;
}


void f()
{
      if(h->char_ch=='i')
          h=h->next;
      else
          if(h->char_ch=='(')
  {
               h=h->next;
               e();
               if(h->char_ch==')')
                   h=h->next;
               else
                   right=0;
  }
          else
               right=0;
}


void main(void)
{

    right=1;
    h=malloc(sizeof(Lchar));//动态生成临时存储空间..
    h->next=NULL;//空指针
    p=h;//p指向指针h的空间

    printf("请输入需语法分析的式子,并以‘#’号结束:\n");
    do
{
         ch=getchar();//读入字符
        // putchar(ch);//输出字符,yuanyoud
  
         if(ch=='i'||ch=='+'||ch=='*'||ch=='('||ch==')'||ch=='#')
 {
              temp=malloc(sizeof(Lchar));//创建新空间
              temp->next=NULL;
              temp->char_ch=ch;//指针指向新读入的字符
              h->next=temp;//h指向temp的空间
              h=h->next;//指针后移
 }
         else
 {
              temp=p->next;
              printf("\nInput a wrong char!\n Input again:\n");
              for(;;)
  {    
                   if (temp!=NULL)
                       printf("%c",temp->char_ch);  //输出不符合项后边所有的项    
                   else
                       break;
                   temp=temp->next;
  }
 }
}while(ch!='#');

    p=p->next;
    h=p;
    e();

    if(h->char_ch=='#'&&right)
        printf("\nOK!\n");
    else
        printf("\nError!\n");
    getchar();
}

[/code]

回复列表 (共3个回复)

沙发

我用的vs 2008 这个是网上copy过来的怎么就出错了,由于以前从来怎么用过c 求高手赐教。这个错误是
>d:\documents and settings\administrator\my documents\visual studio 2008\projects\dfa\dfa\dfa.cpp(88) : error C2440: “=”: 无法从“void *”转换为“Lchar *”
1>        从“void*”到指向非“void”的指针的转换要求显式类型转换
1>d:\documents and settings\administrator\my documents\visual studio 2008\projects\dfa\dfa\dfa.cpp(100) : error C2440: “=”: 无法从“void *”转换为“Lchar *”
1>        从“void*”到指向非“void”的指针的转换要求显式类型转换

板凳

很正常,C++编译器要求这种void*到其它指针类型的显式转换(反过来则隐式转换),C编译器void*到非void*之间默认隐式转换。

3 楼

就是要求你将80和100行的void*指针显示转换为Lchar*。如(Lchar*)malloc...

我来回复

您尚未登录,请登录后再回复。点此登录或注册