C++编译中碰到的问题

21 篇文章 0 订阅

VS2010编译

编译器可以连接多种库,如C运行库,标准C++库,和旧iostream 库

C++包含头文件带 .h,如#include<iostream.h>  则visual c++在编译时,自动连接到旧的iostream库中。

如果不带.h,并使用了命名空间std, 如#

include<iostream>

using namespace std;

则编译时,链接到标准c++库。

运行库分为静态链接库,后缀名.lib,编译时,程序自动和库文件连接。

动态链接库,后缀名 .dll,它导入的库文件的拓展名认为.lib,但与静态链接库LIB有很大区别,导入库文件用于连接dll库的关联文件,其中没有定义函数代码,只保存函数的入口地址,进行链接时帮助连接器找到dll库中对应的函数。

 

 预编译

include 'stdafx.h' before including this file for PCH

预编译头文件(一般扩展名为.PCH),是把一个工程中较稳定的代码预先编译好放在一个文件(.PCH).这些预先编译好的代码可以是任何的C/C++代码--甚至可以是inline函数,只它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码. 为什么需要预编译头文件?一言以蔽之:提高编译速度.一般地,编译器以文件为单位编译,如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(eg.Macro,Preprocessor预处理),VC程序中,这些头文件中所包括的东西往往是非常大的,编译之将占很长的时间.但它们又不常被修改,是较稳定的,为单独的一个小文件而重新编译整个工程的所有文件导致编译效率下降,因此引入了.PCH文件. 如何使用预编译头文件以提高编译速度?要使用预编译头文件,必须指定一个头文件(.H),它包含我们不会经常修改的代码和其他的头文件,然后用这个头文件(.H)来生成一个预编译头文件(.PCH)VC默认的头文件就是StdAfx.h,因为头文件是不能编译的,所以我们还需要一个.CPP文件来作桥梁,VC默认的文件为StdAfx.cpp,这个文件里只有一句代码就是:include"StdAfx.h".接下来要用它生成.PCH文件,涉及到几个重要的预编译指令:/Yu,/Yc,/Yx,/Fp.简单地说,/Yc是用来生成.PCH文件的编译开关.Project->setting->C/C++Category里的Precompiled Header,然后在左边的树形视图中选择用来编译生成.PCH文件的.CPP文件(默认即StdAfx.cpp)你就可以看到/Yc这个开关,它表示这个文件编译了以后是否生成.PCH文件(可能/Ycc表示create)./Fp指令指定生成的.PCH文件的名字及路径(可能/Fpp代表path)./Yuuuse使用,工程中只要包括了.H文件的文件都会有这个/Yu指令.如果选择自动Automatic...的话则原来为/Yc的地方就换成了/Yx指令.如果选择自动,则每次编译时编译器会看以前有没有生成过.PCH文件,有则不现生成否则就再次编译产生.PCH文件.

 


编译错误

#include类的头文件与直接写class加类名有何区别

使用class  类名一般是为了去除编译依赖,减少编译消耗的时

#include "xx.h" 在编译的时候把xx.h文件直接展开,所以里面的接口都能用,可以申明对象。但是classxx;这种方式就不会,你只能使用它的指针或者引用,你不能创建申明对象。

 

 

1>ListeningSocket.obj: error LNK2001: unresolved external symbol "public: virtual structCRuntimeClass * __thiscall CListeningSocket::GetRuntimeClass(void)const "(?GetRuntimeClass@CListeningSocket@@UBEPAUCRuntimeClass@@XZ)

 

编译出错,还有可能与#include .h文件的顺序有关,这个坑爹!!!!

 

error C2236

Error2236, 可能引用头文件的时候,被引用的头文件的最后要有分号!!

如果前面没东西 上一个头文件最后面是什么.
那地方应该少了个 分号

 

Error 2146

在一个类A的声明文件(头文件)中包含了另一个类B的头文件,而B的头文件中含有类A的应用,可能导致在编译类A的头文件时会用到A的对象等,导致未定义!!!!

 

在任何cpp文件的开头都按这样的顺序Include:  

 #include  "XXXDoc.h"  

 #include  "XXXView.h"  

 #include  "MainFrm.h"  

  注意,Doc的头文件一定要在最前面。这样你的CDemoView和CMyView也可以共享一个CDemoDoc。  

  一般在Cpp中包含文件是要注意类的包含关系,被包含的类定义应该在前面。如果实在有冲突,可以在一个类的头文件中加:class   CXXXDoc;之类的空定义。这样定义过的头文件中可以用CXXXDoc申明指针,但是不能申明实际对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值