RT。
JM86源码使用C写的,想用MFC做个界面,调用C程序。
使用extern "C"包含了.C的头文件,发现许多语法错误。
但是用编译为C++文件的控制台调用时却没发生问题,同样也是extern "C"。
求解这到底是为什么呢?

解决方案 »

  1.   

    可能和windows/mfc中定义的类型有冲突
      

  2.   

    有一个TRACE的宏的重定义,我不DEBUG的话应该没问题吧
      

  3.   

    看了一下主要是这段代码的问题
    typedef enum {
      FALSE,
      TRUE
    } Boolean;头文件中定义的BOOLEAN,编译器显示这里有语法错误
    别的错误好像都是因为不认识这个BOOLEAN类型
      

  4.   


    typedef enum {
      FALSE,
      TRUE
    } Boolean;
    Boolean是自己定义的类型
    测试过了,将这个写在在头文件中,可以INCLUDE并且在CPP文件中定义并使用,而MFC程序是不认得。不知道为什么?
      

  5.   

    补充一点,是可以在CPP控制台程序中使用,而MFC程序会报语法错误。
      

  6.   

    补充一点,是可以在CPP控制台程序中使用,而MFC程序会报语法错误。
    这应该是命名冲突
    试着
    重命名或使用命名空间
      

  7.   

    因为windef.h里定义了
    #define FALSE 0
    #define TRUE  1
    如果直接或间接包含了这个头文件

    typedef enum {
    FALSE,
    TRUE
    } Boolean;
    会被解析成
    typedef enum {
    0,
    1
    } Boolean;
    这样当然就编译不过了
      

  8.   

    确实是这样,谢谢了
    不过有什么方案能解决这个冲突么,除了改名还有别的方法么?总不能改WINDEF.H吧
      

  9.   


    #undef FALSE 
    #undef TRUE 
    typedef enum {
    FALSE,
    TRUE
    } Boolean;直接这样就可以
      

  10.   

    或者改掉这个Boolean可以这样
    typedef BOOL Boolean;你其他代码不用变.
      

  11.   

    对于发生命名冲突的定义,这样写可以吗?
    #include <windef.h>
    #include <winnt.h>
    #undef FALSE
    #undef TRUE
    #include "userhead.h"
    #define FALSE 0
    #define TRUE 1