当前位置: 代码迷 >> VC/MFC >> 对于实现跟定义分开的类,为什么Visual studio里面只需要包含.h文件就行了
  详细解决方案

对于实现跟定义分开的类,为什么Visual studio里面只需要包含.h文件就行了

热度:128   发布时间:2016-05-02 03:33:22.0
对于实现和定义分开的类,为什么Visual studio里面只需要包含.h文件就行了
本帖最后由 K8001 于 2015-10-10 15:09:51 编辑
假设我定义了abc这个类
abc.h里面是类的定义
abc.cpp里面  先包含了abc.h,后面是各个成员函数的实现

visual studio里使用这个abc类的话,只需要包含abc.h文件,而如果用g++来编译的话则需要包含abc.cpp文件。微软是不是帮用户智能判断了一下,我感觉这样不太好啊。
------解决思路----------------------
VS 使用 project 来编译项目,在项目配置里面会有项目里面每一个 cpp 文件的编译方式。
所以不需要你手动处理。

而在 makefile 中,你需要添加每一个源文件。
------解决思路----------------------
看来lz不大了解c/c++的链接机制, 可以去网上搜一下. 不过MSC链接的确爽, gcc之类的有互相引用的静态库要用用-Xlinker 也是很蛋疼
------解决思路----------------------
这个你可以理解为VS编译器把你的编译过程给集成了,集成在.vcproj文件中,编译的时候当然也是通过这个文件和相关.h和cpp来编译,实际上底层跟makefile差不多,只是这个工作不必你来做罢了
------解决思路----------------------
当然不是,程序生成一般两个步骤
1是编译,要求是每个程序中使用的符号都必须能找到出处。
每个cpp文件中调用的函数必须找到出处,出处可能是cpp文件中定义的符号,可以是include进来的某个.h文件中的声明(编译阶段对应函数实现不是必须的)

2是连接,连接首先在当前模块中找是否有对应实现,如果没有,在项目的其他obj文件中找,然后,再到指定的库中找

如果一个功能块已经编译成库,那么,你要使用之,则简单的include对应的.h文件即可
------解决思路----------------------
lz说gcc需要源cpp文件,只是说明你的连接库设置不正确而已
------解决思路----------------------
.vcproj 本质上,就是个makefile 
只是没有按照makefile 编写而已
VC5  .mak 也是工程文件的,
VC6 .prj 不知道记错了没有,
其实也是 makefile直接改扩展名,就可以当成  .mak 
VC7 以后改变 文件组织方式,但是实质上,还是 makefile
------解决思路----------------------
g++和vs一样,都不需要cpp文件
除了h,vs还需要lib或者dll,g++则需要a或者so(如果是mingw/cygwin的话也是lib或dll)
命令差不多是这样子的
g++ main.cpp -o main -L库文件目录 -l库名称
  相关解决方案