找回密码
 注册
搜索
查看: 745|回复: 7

[讨论] C call C++ code出现的问题!

[复制链接]
发表于 2010-7-7 18:19:27 | 显示全部楼层 |阅读模式
我准备把一段C++的function porting在我的代码里,因为C++的code调用的都是win32的标准库,所以在对malloc,free的调用时会导致一种link报错,大致象:
Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).

但是问题是,我现在在cpp函数里,屏蔽掉这些函数后,ok,link通过。可当我把构造函数定义起来的时候,哪怕函数为空,也会link错。但是其他的成员函数,怎么定义都没问题,很奇怪。
有谁有porting C++ code的经历?一起探讨下![em03]
发表于 2010-7-9 16:55:03 | 显示全部楼层
是不是使用了new/malloc等系统函数?
把map文件贴出来看看
点评回复

使用道具 举报

发表于 2010-7-9 16:52:47 | 显示全部楼层
你是怎么new这个object的?
注意:
1、每个类必须有一个构造函数,否则没法创建对象;

  2、若programer没有提供任何构造函数,则C++提供一个默认的构造函数,该默认构造函数是无参构造函数,它仅负责创建对象,不做任何初始化的工作;

  3、只要programer定义了一个构造函数(不管是无参还是有参构造),C++就不再提供默认的默认构造函数。即如果为类定义了一个带参的构造函数,还想要无参构造函数,就必须自己定义;

如果你使用的地方:

Hunspell *P=new Hunspell();
那必然会有错误,因为你定义了带参数的构造函数,不带参数的就不存在了,自然找不着。。。。。。

C里边掉用的code什么样????可能有问题。。。。。
sys_stackheap.o是平台的code把?我感觉似乎是他不认识你的构造函数。。。。可能是两种以上的可能。。
实在不行有个办法绕一下:
不定义构造函数,定义一个
void Hunspell::initial(const char * affpath, const char * dpath, const char * key);[em01][em01][em08][em08]
点评回复

使用道具 举报

发表于 2010-7-9 15:44:55 | 显示全部楼层
referred from sys_stackheap.o这个.o是c++编译出来的吗?
点评回复

使用道具 举报

发表于 2010-7-8 17:48:41 | 显示全部楼层
路过 不好意思 帮顶
点评回复

使用道具 举报

 楼主| 发表于 2010-7-8 17:39:10 | 显示全部楼层
[em13]人呢?人呢?
点评回复

使用道具 举报

 楼主| 发表于 2010-7-8 11:05:57 | 显示全部楼层
其实代码也没什么特别好贴的,如果实现他的任何成员函数:
void Hunspell::method(const char* para)
{
}

int Hunspell::cleanword2(char * dest, const char * src,
    w_char * dest_utf, int * nc, int * pcaptype, int * pabbrev)
{
}
link都没问题。
但是只要是定义一下构造函数。
Hunspell::Hunspell(const char * affpath, const char * dpath, const char * key)
{
}
link就报错,报错仍然是
Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).
[em07]
点评回复

使用道具 举报

发表于 2010-7-8 09:00:12 | 显示全部楼层
贴下代码先!
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2025-1-7 06:52 , Processed in 0.046516 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表