Yuan-w 2015-04-11 02:21 采纳率: 0%
浏览 1889

关于C++头文件与cpp文件的疑问

http://www.cnblogs.com/laojie4321/archive/2012/03/30/2425015.html
我从上面的网站中看到这么一段话
如果在头文件中实现一个函数体,那么如果在多个C文件中引用它,而且又同时编译多个C文件,将其生成的目标文件连接成一个可执行文件,在每个引用此头文件的C文件所生成的目标文件中,都有一份这个函数的代码,如果这段函数又没有定义成局部函数,那么在连接时,就会发现多个相同的函数,就会报错
然后我自己测试了一下,在一个项目内建立了aaa.cpp,bbb.cpp,ccc.h这三个文件,
在ccc.h中写
class A
{
int a;
void f(){}
};
然后在bbb.cpp和aaa.cpp文件中都包括了这个头文件,发现并没有出错,这是怎么回事?
第二个测试:
我在ccc.h文件中写
class A
{
static int a;
};
int A::a=9;
然后在aaa.cpp和bbb.cpp文件中都包括这个头文件,发现出错了,但是如果我去掉
ccc.h文件中的“int A::a=9;”这一行代码后再编译,发现并没有出错,
或者再新建立一个ddd.cpp文件中写到
#include"ccc.h"
int A::a=9;
同时去掉ccc.h文件中的“int A::a=9;”这一行代码后再编译,发现并没有出错,
这是怎么回事?
第三个测试:
一个全局变量不能在多个CPP文件中重复定义,但是一个类可以在多个CPP文件中重复定义
我在aaa.cpp文件中写
class M
{
int a;
void g(){}
};
在bbb.cpp文件中写
class M
{
double a;
void f(){}
};
编译后发现都没出错,这又是怎么回事?

  • 写回答

5条回答

  • threenewbee 2015-04-11 02:33
    关注

    你那个不是全局变量,是类的成员变量。
    另外重复包含一个类的定义肯定会出错,不知道你说的不出错是什么意思,你有没有真正把它们添加到项目中。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog