请教一个多线程静态库的问题, 谢谢
时间:2010-08-28
来源:互联网
Windows 下做一个多线程的静态库 "/MT”
#include "stdafx.h"
#include <iostream>
using namespace std;
void c ( int errno )
{
}
int d ( )
{
int ret = 0;
c ( ret ); //此行会报错误
return ret;
}
发现只要加上以下两行就编译不过:
#include <iostream>
using namespace std;
报错:error C2664: 'c' : cannot convert parameter 1 from 'int' to 'int *(__cdecl *)(void)'
Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
请问有谁碰到过这个问题,该如何解决?那两行还不能不要,应为我要使用C++的string。
作者: unicornx 发布时间: 2010-08-28
作者: drangon 发布时间: 2010-08-28
回复 drangon
貌似和using namespace std;没有关系。
只要加上#include <iostream>就不行
如下这样写就报错:
#include "stdafx.h"
#include <iostream>
void c ( int errno )
{
}
int d ( )
{
int ret = 0;
c ( ret );
return ret;
}
而且只和设置多线程有关,如果设置为单线程就编译ok。
作者: unicornx 发布时间: 2010-08-28
做lib 只编译不链接的
作者: phy0077 发布时间: 2010-08-28
试了这个,还是不行:(,一样的错误, 请问是我声明的方式不对还是别的问题?
#include <iostream>
using namespace std;
extern "C" {
void a ( int errno );
int b ( );
}
int b ( )
{
int ret = 0;
a ( ret );
return ret;
}
void a ( int errno )
{
}
作者: unicornx 发布时间: 2010-08-28
extern "C"
...
extern "C"你不会用吗
直接声明,不用extern "C"
.....
原来是errno的问题,换个名字,汗

作者: phy0077 发布时间: 2010-08-28
谢谢各位,找到原因了:
void a ( int errno );
“errno" 是C++的保留变量名,自己定义的变量不能冲突,改成别的变量就好了。
结贴。
作者: unicornx 发布时间: 2010-08-28
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28