为什么VC中报错:不允许 dllimport 函数 的定义 ??

218201 2005-08-10 03:57:36
在VC7.1中如下代码编译报错如何处理?

BCB6下正常.

VS.NET2003中:
“CTest<T>::~CTest” : 不允许 dllimport 函数 的定义
“CTest<T>::CTest” : 不允许 dllimport 函数 的定义



//代码如下

template<class T>
class __declspec(dllimport) CTest
{
public:
CTest();
~CTest();
};

template<class T>
CTest<T>::CTest()
{
//
}

template<class T>
CTest<T>::~CTest()
{
//
}
...全文
533 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
z1234567890123 2005-08-11
  • 打赏
  • 举报
回复
参考www.58ip.com/?user=chinabbs
218201 2005-08-11
  • 打赏
  • 举报
回复
look
218201 2005-08-11
  • 打赏
  • 举报
回复
我对预编译参数做了调整,让那些宏不会展开为__declspec( dllimport ),要一个一个项目调整(不同项目有不同的参数名称),烦死了

不过总算编译成功
218201 2005-08-10
  • 打赏
  • 举报
回复
就是说像帖子中的代码中的__declspec( dllimport ),bcc是可以忽略的.

cl在非模板类的时候也能忽略,但在模板类中会报"不允许 dllimport 函数 的定义"

可能是因为VC把上面的模板处理后,就在函数的定义前加了__declspec( dllimport )

(从代码写法上自然人读不出有dllimport定义的含义;只是dllimport了声明)


这个,能不能通过配置解决.
218201 2005-08-10
  • 打赏
  • 举报
回复
可能说得不是很明白,是这样的

模板类这样子导出导入基本是不可能的.这里是相当定义了一个模板类.

上面的代码是从一个开源库里大量使用的一个型.
template<class T>
class 宏xxxx CTest
{

(不知道什么原因大量遗留着这么一种形式的宏,宏xxxx不仅仅一个有很多种,它们在某些时候代入的就条件下展开为__declspec( dllimport ),这些宏又是用另一个开源库的宏定义的)

因为这种型的代码在该库中大量存在,况且代码也不由我来控制,所以我不想更改该宏的定义.(假如改为空白应该是可以通过编译的)

因为是用CMake工具生成的VS工程文件,所以我想问问有没有编译器选项之类可以忽略这个错误.或是其他办法.
wshcdr 2005-08-10
  • 打赏
  • 举报
回复
VC6 在dll中到处一个模板类可以编译过去
但是想要导出来,也编译不过,

doway 2005-08-10
  • 打赏
  • 举报
回复
改成 dllexport。

218201 2005-08-10
  • 打赏
  • 举报
回复
代码不是我写的,是老外写的一个库

那个__declspec(dllimport)其实是宏在一定的条件下代入的,


这个代码应该理解为定义一个模板类,而忽略__declspec(dllimport)含义
(类在代码中完整实现了麽)

但是VC给报了个错,偶只想知道怎么样才能通过编译
healer_kx 2005-08-10
  • 打赏
  • 举报
回复
BCB那么好嘛? 这种模板怎么导出啊?
都不知道你的类型呢。

64,685

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧