比如这么一个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当中.但是我把实现放到头文件中又会提示我说重复定义.
怎么办?
在头文件中:
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当中.但是我把实现放到头文件中又会提示我说重复定义.
怎么办?
解决方案 »
- 怎么用vc编写程序实现发送yahoo等网站的weimail
- 求助,wparam参数类型的问题。
- 麻烦用 vc2003 或 vc2005 的朋友帮个忙。 我把和错误相关的代码提取出来了,就几行,帮忙看看
- 菜鸟问题,急,求助大家!!!
- 请问listcontrol有没有一个函数可以得到它的列数?
- 有人知道"ACK"命令是什么吗??? 串口通讯....
- 高手看过来!!!!!
- 请教access2000和dao编程高手?在线等!!送高分!!!
- DLL文件包含恶心问题
- 为什么我的程序Release比Degug的慢的多??
- _com_util::ConvertBSTRToString 转化出错
- 关于录音音量控制的问题
__declspec(dllexport) const float Test::x = 1.0f;
另外我在cpp文件的静态成员的定义那也加了这个,不过问题仍然存在
照说应该是头文件中extern一下。
不过你为什么要export一个static的成员变量呢?失去了封装的意义...
如果一定要export,搞成全局的就行了呀!
#ifdef DLL_EXPORT
#define _DLL __declspec(dllexport)
#else
#define _DLL __declspec(dllimport)
#endif然后在编译dll的工程中加入宏定义DLL_EXPORT,在使用dll的工程中不要加.
搞了半天原来是export和import的区别^^^^^^