C++文件包含发生多重定义符号错误问题
//12.cpp#include<iostream>usingnamespacestd;voidmb(inta){cout<<a;}//11.cpp#include"12...
//12.cpp #include<iostream>using namespace std; void mb(int a) {cout<<a; } //11.cpp #include"12.cpp" int main() {int a=12; mb(a); return 0; } 编译还成功,但生成发生?mb@@yaxh@z已经在11中定义,找到多个多重定义的符号,错在那里? 放在同一文件能运行成功…
在Vs2005运行我知道了,函数重新定义,那什么时候用文件包含呢? 展开
在Vs2005运行我知道了,函数重新定义,那什么时候用文件包含呢? 展开
展开全部
//12.cpp
#include<iostream>
using namespace std;
void mb(int a) {cout<<a; }
//11.cpp
#include"12.cpp"
int main()
{
int a=12;
mb(a);
return 0;
}
和a的定义没关系。
你的mb函数在11中定义,在11.cpp中会编译一次;
你把11包含到22.cpp中,它会再编译一次,就会导致有两个mb函数的定义。
所以,你应该做的就是,把mb函数的声明,放在11.h文件中,11.cpp和22.cpp都包含11.h即可。
请搞清楚“声明”和“定义”的具体含义。
#include<iostream>
using namespace std;
void mb(int a) {cout<<a; }
//11.cpp
#include"12.cpp"
int main()
{
int a=12;
mb(a);
return 0;
}
和a的定义没关系。
你的mb函数在11中定义,在11.cpp中会编译一次;
你把11包含到22.cpp中,它会再编译一次,就会导致有两个mb函数的定义。
所以,你应该做的就是,把mb函数的声明,放在11.h文件中,11.cpp和22.cpp都包含11.h即可。
请搞清楚“声明”和“定义”的具体含义。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询