1.段错误

段错误:指的是访问了不可访问的内容,内存要么是不存在的,要么是受到系统保护的。

如:1.释放了不存在的内存(堆内存)

    int a = ;
    free a;

2.代码被重复定义了

往往是由于头文件被重复定义了。可以使用宏定义来解决。xxx可以是任意变量名

    #ifndef xxx
    #define xxx
    添加你所定义文代码
    #endif

3.forward declaration(前置声明)

当想要使用一个类型的时候除了包含头文件外还可使用含前置声明。并且只能把该类型声明为指针或者引用,不能进行初始化也就是说在没有定义之前都无法使用。这个时候编译器只知道了类型,根本不知道它的大小等信息。这也是为什么不能声明为普通变量的形式,因为编译器无法对其进行初始化(incomplete type)。使用前置声明时,往往多用于函数参数中。

test1.h

class A{

public:

void say();

};

test2.h

class A;

class B{

  public:
  A* a_;
  void say(A* a);

}

可以看到类B使用了类A,除了引入头文件外还以使用前置声明即在class B{}上面添加“class A;"便可。在之后的test2.cpp中必要包含test1.h才能对class A进行定义,然后进行使用,如

#include "test2.h"

#include "test1.h"

void B::say(A* a){

a->say();

}

使用前置声明的方式加强了类的可读性,能够适当减少繁琐的#include,以及改善头文件相互包含引起的问题。这类问题要记住:在声明时可以只需要知道类型,使用时必须进行了定义。

4.头文件之间的相互包含问题

在定义头文件的时候一定要记住使用条件预编译语句,防止重复包含

#ifndef TEST

#define TEST

//your content

#endif

test1.h

#ifndef TEST1

#define TEST1

#include "test2.h"

class A{

public:

B* b;

};

#endif

test2.h

#ifndef TEST2

#define TEST2

#include "test1.h"

class B{

  public:
  A* a_;
  void say(A* a);

}

#endif

此时展开test1.h会得到

#ifndef TEST1

#define TEST1

class B{

  public:
  A* a_;
  void say(A* a){
      a_ = a;
  }

}

class A{

public:

B b;

};

#endif

可以看到class B的定义是在class A之前定义的,B中又对A进行了声明,这个时候只需要在test2.h中使用前置声明(class A)便可以编译过test1.h。编译test2.h同理,test1.h中使用前置声明(class B)。

C/C++常见错误的更多相关文章

  1. 初识JAVA(二)(送给Java和安卓初学者)----常见错误

    博主接着上篇的来讲哦,以后的更新中,博主会出一些练习题,有兴趣的可以做做然后吧代码粘贴到下面,大家可以一起研究学习,一起进步,本篇文章主要讲的是: 一.常见错误 二.连接上篇一起的训练 无论是什么方向 ...

  2. ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock

    ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 通过终端安装程序sudo apt-get install xxx时出错:E: Could not ...

  3. coreseek常见错误原因及解决方法

    coreseek常见错误原因及解决方法 Coreseek 中文全文检索引擎 Coreseek 是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和 ...

  4. Android Fragment使用(二) 嵌套Fragments (Nested Fragments) 的使用及常见错误

    嵌套Fragment的使用及常见错误 嵌套Fragments (Nested Fragments), 是在Fragment内部又添加Fragment. 使用时, 主要要依靠宿主Fragment的 ge ...

  5. C语言初学者代码中的常见错误与瑕疵(23)

    见:C语言初学者代码中的常见错误与瑕疵(23)

  6. struts2.5框架使用通配符指定方法常见错误

    struts2.5框架使用通配符指定方法(常见错误) 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="shop" namespace ...

  7. .Net常见错误

    常见错误 #1: 把引用当做值来用,或者反过来 C++ 和其他很多语言的程序员,习惯了给变量赋值的时候,要么赋单纯的值,要么是现有对象的引用.然而,在C# 中,是值还是引用,是由写这个对象的程序员决定 ...

  8. WCF项目中出现常见错误的解决方法:基础连接已经关闭: 连接被意外关闭

    在我们开发WCF项目的时候,常常会碰到一些莫名其妙的错误,有时候如果根据它的错误提示信息,一般很难定位到具体的问题所在,而由于WCF服务的特殊性,调试起来也不是那么方便,因此往往会花费不少时间来进行跟 ...

  9. Python程序的常见错误(收集篇)

    关于Python Python是一门解释性的,面向对象的,并具有动态语义的高级编程语言.它高级的内置数据结构,结合其动态类型和动态绑定的特性,使得它在快速应用程序开发(Rapid Applicatio ...

  10. 【ubuntu 】常见错误--Could not get lock /var/lib/dpkg/lock

    ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 通过终端安装程序sudo apt-get install xxx时出错: E: Could not ...

随机推荐

  1. ionic3 应用内打开第三方地图导航 百度 高德

    1.安装检测第三方APP是否存在的插件 cordova plugin add cordova-plugin-appavailability --save npm install --save @ion ...

  2. where are you?

    #version_s#1.2#version_e# #update_s#https://files.cnblogs.com/files/dyh221/rank0410.zip#update_e#

  3. myls

    #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unist ...

  4. 如何在一台计算机上配置多个jdk【转】

    分析问题 为了多快好省的解决当前的问题,我的想法是在windows中同时安装jdk1.6和jdk1.8,在中间进行切换,而不需要多次进行重复的安装和卸载,这样简单方便. 解决思路 第一步:在安装之前, ...

  5. C# array与arraylist区别及获取sql字段名

    array与arraylist的区别: 1.  Array 的容量是固定的,而 ArrayList 的容量是根据需要自动扩展的.如果更改了 ArrayList.Capacity 属性的值,则自动进行内 ...

  6. Android 底部导航栏的xml

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  7. 王者荣耀交流协会final发布-第3次scrum立会

    1.例会照片 成员高远博,冉华,王磊,王玉玲,任思佳,袁玥出席.拍照的是王磊同学,王超同学因参加比赛不在学校,不能出席. master:任思佳 2.时间跨度 2017年12月3日 18:00 — 18 ...

  8. NewSQL和TiDB入门

    TiDB已经在项目中使用,从了解来看,它主要解决的是分布式事务的问题,而我们实际使用场景,却是大数据量下不需要关注分表: 最近实在忙加懒,一直没时间看TiDB的原理.今天看了下PingCAP3篇入门介 ...

  9. vue打包上传oss

    今天把vue打包之后上传到oss,遇到了一点问题,现在解决了总结一下心得: OSS (Object Storage Service)名为对象存储,配合cdn使用达到静态文件托管加速,提升网站文件访问速 ...

  10. Python IO密集型任务、计算密集型任务,以及多线程、多进程

    对于IO密集型任务: 直接执行用时:10.0333秒 多线程执行用时:4.0156秒 多进程执行用时:5.0182秒 说明多线程适合IO密集型任务. 对于计算密集型任务 直接执行用时:10.0273秒 ...