有谁遇到过这个error????(sundayboys)
[C++ Error] stdlib.h(434): E2132 Templates and overloaded operators cannot have C linkage
已经声明了exernt "C"
问题点数:20、回复次数:6Top
1 楼Pasp(CJY)回复于 2001-12-26 10:28:19 得分 0
exernt "C++" 试试Top
2 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2001-12-26 10:29:50 得分 0
那就不要声明extern "C"Top
3 楼csz_cmy(PIC&C51)回复于 2001-12-26 10:32:24 得分 0
Polarislee(北极星) 对!Top
4 楼rusteel()回复于 2001-12-26 10:42:42 得分 0
感谢sundayboy!!!
to Polarislee(北极星) & csz_cmy(讨厌编程):
我对老板的建议和你们说的一样,但我们是在改代码,如果要改,涉及的范围比较大,所以老板要我找出导致这个错误的根本原因,并要我证明给他看(最好能写一个例程,来证明的的确确是extern "C"的原因)。
原来的代码是在VC5(没错,是VC5不是VC6)下面写的,很老,在未改动一个字的情况下在BCB5下编译,就无法通过。Top
5 楼sundayboys(sunboy)回复于 2001-12-26 12:43:32 得分 0
希望高手关注一下。Top
6 楼rusteel()回复于 2001-12-26 17:41:33 得分 20
问题我解决了,是在cber的指点下解决的,万分感谢他!!!
我写的证明程序(有两个文件)如下,如果有谁遇到和我一样的问题,也可以参考一下。(运行环境:BCB5)
//--------------- testExternC.cpp ----------------/
#include <conio.h>
#include <iostream>
extern "C" { //注释掉这一行和下面的括号,就没问题了
#include "testExternC.h"
} //注释掉
using std::cout;
using std::endl;
int main(int argc, char* argv[])
{
float f1 = 2.2;
set(f1);
_getch();
return 0;
}
//------------------ testExternC.h ------------------/
#include <iostream>
using std::cout;
using std::endl;
template<typename T>
void set()
{
cout << "ok" << endl;
}
template<typename T>
void set(const T& ff)
{
T f = ff;
cout << "f = " << f << endl;
}
//-----------------------------------------------Top




