在class外面进行实例化声明:
MyClass* MyClass::m_Instance;-------------------------------------------------------
广告:VC/WinAPI 网络/多线程讨论 QQ群, 群号:41356711

解决方案 »

  1.   

    忘记说了,那行代码放到你dll的.cpp文件里,别放进.h
      

  2.   

    我开始的时候已经在cpp中进行实例化声明了:MyClass* MyClass::m_Instance=NULL;
    问题依旧.
      

  3.   

    可能问题没有说清楚.重新整理下吧
    ========================================动态链接库中类包含静态成员变量
    class  __declspec(dllexport) MyClass  
    {   
      ...   
    protected:   
      static   MyClass*  m_Instance 
      ...   
     }   
    在cpp文件中对静态成员变量实例化声明
    MyClass* MyClass::m_Instance = NULL;整个动态库编译正常====================================================在外部程序中调用这个Dll的MyClass类.
    MyClass oneClass;编译外部程序的时候,出现链接错误:
    error   LNK2001:   unresolved   external   symbol   "protected:   static   class   MyClass* MyClass::m_Instance "   ......    
      请问这该如何解决?
      

  4.   

    没碰到过你的问题,不是很清楚
    看样子像是编译器没找到实体
    你在外部重新定义一个实体试试看 - -#
    -------------------------------------------------------
    广告:VC/WinAPI 网络/多线程讨论 QQ群, 群号:41356711
      

  5.   

    加个__declspec(dllexport) MyClass* MyClass::m_Instance;试试
      

  6.   

    以上的回答都是些水货发表的。这么简单的问题还搞了半天,真是可笑。我的解答如下:
    这是由于导出类的修饰错误,对于dll本身来讲,修饰应该是__declspec(dllexport),而对于调用者来讲,应该是__declspec(dllimport)。而为了正确的编译修饰,可以声明如下:
    #ifdef MY_DLL_EXPORT
    #define _DLL_EXPORT_ __declspec(dllexport) 
    #else
    #define _DLL_EXPORT_ __declspec(dllimport) 
    #endif
    将MY_DLL_EXPORT加到dll 工程的预编译定义中。
    现在你可以使用_DLL_EXPORT_宏来修饰你任何想导出的类或函数了。
    如果再搞不定,你可以将你的代码发给[email protected],我将会及时帮你搞定。祝你好运!
      

  7.   

    我的解答如下:
    这是由于导出类的修饰错误,对于dll本身来讲,修饰应该是__declspec(dllexport),而对于调用者来讲,应该是__declspec(dllimport)。而为了正确的编译修饰,可以声明如下:
    #ifdef MY_DLL_EXPORT
    #define _DLL_EXPORT_ __declspec(dllexport) 
    #else
    #define _DLL_EXPORT_ __declspec(dllimport) 
    #endif
    将MY_DLL_EXPORT加到dll 工程的预编译定义中。
    现在你可以使用_DLL_EXPORT_宏来修饰你任何想导出的类或函数了。
    如果再搞不定,你可以将你的代码发给[email protected],我将会及时帮你搞定。祝你好运!
      

  8.   

    也可能你把静态变量的定义和初始化放在头文件里了,应该把他们放在cpp文件里,偶曾犯过这样的错误
      

  9.   

    问题没搞清就是说别人是水货,我看楼上发的才是初级言论。
    楼主的问题恐怕和编译器有一定关系。
    VS2005下,如果是const静态成员变量,直接在类声明里初始化。然后导出类即可。
    非静态的俺就不知道了,还望高手指点。
      

  10.   

    今天老夫也遇到了同样的问题. 也是一个单件类.............用了 johnxt 的方法可以了. 多亏这帖子. 楼主自己可以试试引用这个dll要有导入声明 __declspec(dllimport) 用一个预编译定义来决定
     
    感谢johnxt.
      

  11.   

    http://blog.pfan.cn/article.asp?id=52124
      

  12.   

    不建议在DLL中使用静态变量,这样可能会出现编译时没有问题,
    但使用过程中可能会出现崩溃现象,其实你定义一个全局变量,头
    文件中extern一下就可以了,与静态变量同样的效果
      

  13.   

    很崩溃的遇到这个问题,折腾了一天,终于在这找到解决办法了,johnxt和vcstorm发的帖子很有用,需要__declspec(dllimport)一下
      

  14.   

    @原来 在dll中包含 静态变量有这个讲究! 学习了~~
      

  15.   

    @原来 在dll中包含 静态变量有这个讲究! 学习了~~