C++VS2010提示C2146、C4091。

代码如下:#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i112;
int *p21=0;
cout<<"i的地址为:"<<&i112<<endl;
cout<<"p的值为:"<<p21<<endl;
cout<<"p的地址为:"<<&p21<<endl;
i112=3;
cout<<"i的地址为:"<<&i112<<endl;
p21=&i112;
cout<<"p的值为:"<<p21<<endl;
cout<<"p的内存地址为:"<<&p21<<endl;
return 0;
}
错误回显如下:
1>------ 已启动生成: 项目: 2016-6-9, 配置: Debug Win32 ------
1>生成启动时间为 2016-06-09 21:39:11。
1>InitializeBuildStatus:
1> 正在对“Debug\2016-6-9.unsuccessfulbuild”执行 Touch 任务。
1>ClCompile:
1> 6-9.cpp
1>f:\microsoft visual studio 2010\vc\include\codeanalysis\sourceannotations.h(29): error C2146: 语法错误: 缺少“;”(在标识符“size_t”的前面)
1>f:\microsoft visual studio 2010\vc\include\codeanalysis\sourceannotations.h(29): warning C4091: “”: 没有声明变量时忽略“unsigned int”的左侧
1>
1>生成失败。
1>
1>已用时间 00:00:00.58
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

那是因为,如果源文件是c的话,默认所有导出函数都隐含加了extern"C"的属性你在CPP里使用那些函数,应该需要在声明里加上extern"c"属性的,否则链接器会按CPP方式去查找函数,这当然是找不到的按理说开源工程一般都会做得比较细心才对啊,你看一下它的头文件,一般在开头都会有类似下面的代码,包括windows的头文件,全部都会有的#ifdef__cplusplusextern"C"{#endifxxxxxx函数声明#ifdef__cplusplus}#endif出现你那种情况,大概是函数的声明是你自己把函数名复制过去的吧,没有用开源工程提供的头文件;解决也简单,如果开源工程有提供头文件,那么就用它提供的头文件;如果没有,那么在你声明的地方加上我上面的代码
温馨提示:内容为网友见解,仅供参考
无其他回答

C++VS2010提示C2146、C4091。
那是因为,如果源文件是c的话,默认所有导出函数都隐含加了extern"C"的属性你在CPP里使用那些函数,应该需要在声明里加上extern"c"属性的,否则链接器会按CPP方式去查找函数,这当然是找不到的按理说开源工程一般都会做得比较细心才对啊,你看一下它的头文件,一般在开头都会有类似下面的代码,包括wi...

相似回答
大家正在搜