比如这么一个dll:
在头文件中:
class __declspec(dllexport) Test
{
public:
    static const float x;
}在cpp文件中:
const float Test::x = 1.0f;这样写dll是编译成功了的.但我另外一个exe调用的时候缺出了问题:
#include "test.h"
#include <iostream>
#pragma comment(lib, "test.lib")using namespace std;int main()
{
    cout << Test::x;
    return 0;}却老是报告连接错误.
我想是不是因为静态成员是作为常量像内联函数一样要内嵌到exe当中.但是我把实现放到头文件中又会提示我说重复定义.
怎么办?

解决方案 »

  1.   

    静态成员需要单独导出
    __declspec(dllexport) const float Test::x = 1.0f;
      

  2.   

    应该来说我在class那加了,就相当于这个class下面的花括号里面的全部都加了啊.
    另外我在cpp文件的静态成员的定义那也加了这个,不过问题仍然存在
      

  3.   

    错误原因是没有export。不过好像静态成员没法export...会报2720错
      

  4.   

    搞了几下都不对。
    照说应该是头文件中extern一下。
    不过你为什么要export一个static的成员变量呢?失去了封装的意义...
    如果一定要export,搞成全局的就行了呀!
      

  5.   

    终于知道原因了.这个给大家分享下
    #ifdef DLL_EXPORT
        #define _DLL __declspec(dllexport)
    #else
        #define _DLL __declspec(dllimport)
    #endif然后在编译dll的工程中加入宏定义DLL_EXPORT,在使用dll的工程中不要加.
    搞了半天原来是export和import的区别^^^^^^