为什么我在VC的工程中添加一个.C文件,如a.c
然后在a.c里定义一个全局变量如 int g_val = 0;
然后我在另外一个.cpp文件如b.cpp里外部引用这个
全局变量,如extern int g_val;然后在b.cpp中的某
个函数使用g_val;如 int val = g_val;这样在编译的时候就通不过,是在链接的时候出错,提示b.obj
error LNK2001: unresolved external symbol "int  g_val" (?g_val@@3HA)
这应该是外部引用符号g_val在链接的时候找不到外部链接,可a.obj也成功编译了阿如果把a改成.cpp文件就可以请教大家有没有遇到过类似的问题阿

解决方案 »

  1.   

    在vc环境下默认的实现文件是以.CPP作为后缀的
      

  2.   

    在b.cpp中包含该.c文件#include "a.c"  // 不符合习惯
    extern int a;
      

  3.   

    #include "xxx.h"
    你写到.h里
      

  4.   

    把extern声明写到.h文件,在include这个.h文件,也同样链接无法通过阿
      

  5.   

    c++编译器和c编译器在对变量名进行处理时有不同的规则所以在cpp写extern int g_val;c++编译器编译该文件时,他就认为有一个外部的符号,这个符号不是g_val
    (c++编译器给他改了名字)例如是g_val_111在.c文件中写int g_val;
    c编译器就认为g_val_222(也修改了)是一个变量而.cpp文件要找g_val_111,.c文件把她编译成了g_val_222
    找不到了,怎么办。连接错误正确方法
    extern "C"
    {
           //定义在c文件中用到的变量和函数
    }
    这样才能够正确联接
      

  6.   

    extern"C"也是没用的,大家能试过了在给答案吗
      

  7.   

    你用向导生成一个工程,有一个全局变量CWinApp theApp,你看是怎么使用extern,然后查一下MSDN中extern的说明。
      

  8.   

    偶觉得改成.cpp不就可以了吗?
      

  9.   

    在头文件中声明全局变量:
    extern int g_val;在b.c中定义全局变量:
    int g_val = 0;在b.cpp中包含头文件就可以了