我在其中一个类的.h 和 .cpp里定义了变量并赋值。  在另一个类的.cpp里使用extern 定义变量。  编译提示: error LNK2001: 无法解析的外部符号;如果在.h里使用 extern 则会提示: 非法的存储类
a.hCString str_Sssj;a.cppCString str_Sssj;
str_Sssj = "商家名称";b.cppextern CString str_Sssj;————————————————————
编译提示: error LNK2001: 无法解析的外部符号;
我实在不会弄了。网上也找不到答案。 方法全是错的。

解决方案 »

  1.   

    去掉a.cpp
    中的
    CString str_Sssj;
      

  2.   

    CString str_Sssj;
    只需在.h文件中定义即可,不要再在cpp文件中重复定义。
      

  3.   

    我在两个 点CPP 文件中定义是可以的。
      

  4.   

    取掉 a.cpp 中的定义,只保留 a.h 中的。  结果是一样。  在b.cpp中extern 会报错. link2001
      

  5.   

    a.hextern CString str_Sssj;a.cppCString str_Sssj;
    str_Sssj = "商家名称";b.cpp#include "a.h"
      

  6.   

    回楼上的。 如果在.h文件中使用 extern 会出现:error C2071: “CGlDlg::str_sssj”: 非法的存储类
      

  7.   

    楼上各位都说得正确。可是都没抓住重点。 也许是我表述不清。在QQ群里解决了。   是要这样才行:a.h  的 {} 之外用 extern CString g_str_SSSJ;
    b.cpp 里再用 CString 定义就可以了。但有一点还是没明白。   在a.cpp里赋的值为什么没传递到 b.cpp里。  难道重定义后。就清空了吗? 还是要用指针?
      

  8.   

    a.cppCString str_Sssj;
    str_Sssj = "商家名称";
    ========
    改为
    a.cppCString str_Sssj= "商家名称";
    将h文件中的CString str_Sssj;去掉。
      

  9.   

    获得当前你有要的的类,就可以了
    例如你在框架类中定义了一个变量a,然后在view类中想获取此变量
    CMainFrame *pt=(CMainFrame*)AfxGetApp()->m_pMainWnd;//获得指向当前系统的主框架类对象的指针
    int b;
    b=pt->a;就可以搞定