`
ah_fu
  • 浏览: 223025 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

C++学习:inline的函数或者成员函数一定要定义在头文件中

阅读更多
    看C++的教材的时候,一直记得书上说inline只是一个提示,编译器可能会拒绝将函数定义成内联的。今天犯了思维定式的错误:函数或成员函数加上inline的时候,其实现部分一定要写在头文件中,否则链接的时候将发生找不到引用的错误(GCC编译器在编译的时候还会给出警告)。
       请看下面重犯这个错误的代码:
// MyClass.h
#ifndef _MY_CLASS_H_
#define _MY_CLASS_H_

#include 
<stdio.h>

class MyClass
...{
public:
   
inline void Print();
}
;

inline 
void Test();

#endif

// MyClass.cpp
#include "MyClass.h"


void MyClass::Print()
...{
    printf(
"Print ");
}


void Test()
...{
    printf(
"Test ");
}


// main.cpp
#include "MyClass.h"

int main()
...{
    MyClass o;
    o.Print();
    Test();
    
return 1;
}


    以上例子中:将inline去掉,或者将实现移动到头文件中,链接即可通过。

 
分享到:
评论

相关推荐

    c++中的内联函数inline用法实例

    如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联的。内联函数的inline要加在函数前面,不可以加在声明前面。 class A { public:void Foo(int x, int y) { } // ...

    新手学习C++入门资料

    标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数。 C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。 C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和...

    C++类的内联成员函数应放在哪

    复习C++ Primer的时候,看到了关于C++类的内联成员函数的放置,应该放在头文件中。那么这到底是为什么呢?仅仅是一种代码规范问题还是必须这样做呢?  下面我来讲讲我自己的理解吧。要彻底理解这个问题,首先要...

    c++内联函数(inline)使用详解

    主要介绍了c++内联函数(inline)使用详解,需要的朋友可以参考下

    终于搞懂了,预编译头文件

    这个文件就称为预编译头文件这些预先编译好的代码可以是任何的 &lt;br&gt;C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会 &lt;br&gt;被经常改变。如果这些代码被修改,则需要重新编译...

    C++程序设计彻底研究(是code不是书)

    6.3 inline函数 6.4 变量的适用范围和生存期间 6.5 常犯的错误 6.6 本章重点 6.7 本章练习 第7章 数组 7.1 一维数组 7.2 将数组当成函数的参数 7.3 二维数组 7.4 将二维数组当成函数的参数 7.5 常犯的错误...

    解析VC中预编译头文件的深入分析

    为什么预编译头文件:预编译头的概念: 所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的C/C++...

    c++ #include是怎么样工作的?

    可能不太熟悉,也有可能没有去关心过。我们只关心程序能否正确运行,或者程序怎么实现等等一些问题。... 头文件还可以定义:在编译的时候就已知道其值的cosnt对象和inline 函数。在头文件中定义上述

    c++ 面试题 总结

    同一个函数只存在一个实体(inline除外) 子类覆盖它的函数不加virtual ,也能实现多态。 在子类的空间里,有父类的私有变量。私有变量不能直接访问。 ----------------------------------------------------------...

    预编译头的概念的介绍

    预先编译好放在一个文件里(通常是以.pch为扩展名的),这个文件就称为预编译头文件,这些预先编译好的代码可以是任何的C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会被经常改变。...

    Linux多线程服务端编程:使用muduo C++网络库

    4.4.2exit(3) 在C++ 中不是线程安全的.. . . . . . . . . . . . . . . . 94 4.5善用__thread 关键字.. . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.6多线程与IO . . . . . . . . . . . . . . . . ....

    Linux中gdb查看core堆栈信息

    这些预先编译好的代码可以是任何的C/C++代码,甚至是inline的函数,但必须是稳定的在工程开发的过程中不会被经常改变。 编译器是以文件为单位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含...

    McGraw C++程序调试实用手册

    书中深入地分析了开发不包含逻辑和语法错误的代码技巧以及调试程序的基本原理,介绍了开发和调试命令行代码的过程和方法,说明了关于定位、分析及修复编程错误的方法,介绍了开发 Visual C++程序时所遇到的特殊...

    vld(Visual Leak Detector 内存泄露检测工具 源码)

    当程序退出时CRT会在main()函数返回之后做一些清理工作,这个时候来检查调试堆内存,如果仍然有内存没有被释放,则一定是存在内存泄漏。从这些没有被释放的内存块的头中,就可以获得文件名及行号。  这种静态的方法...

    一些C面试题,希望能对大家有帮助

    static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝 2、程序的局部变量存在于(堆栈)中,全局变量存在于(静态区)中,动态申请数据存在于(堆)中。 3、设有以下...

    vc++ 开发实例源码包

    代码里用了备份dll的方法,因此在自定义的函数中可以直接调用在内存中备份的dll代码,而不需要再把函数头部改来改去。 IOCP反弹远控客户端模型,外加上线服务端,全部代码注释! 如题。这个是IOCP远程控制软件的...

    WTL 9.1 5270 Beta 中文 汉化 中英文对照版

    WTL9.1-ReadMe-中英文对照版 Windows Template Library - WTL Version 9.1 (build 5270) 2015-09-27 Windows模板库 - WTL Version 9.1 (build 5270) 2015-09-27 (水平有限,不足之处,欢迎指正交流:ybmj@vip.163....

    混合滤波matlab代码-Structure_Oriented_Filter_3D:使用结构导向滤波处理三维地震数据,输入和输出均为Matla

    C++混合编程 / 未使用openCV 数据维度 Inline x Xline x Times (也可以使用其他三维数据,例如彩色图片) 注释 main.cpp : demo,包括读取数据,转换数据格式,处理数据,写数据 ReadWriteMat.h : 包含了读写数据的...

    易语言-PHP调用易语言2

    2.直接使用VC6或者Visual Studio打开dll文件,注意在打开文件对话框中一定要选择Resource方式,VC6默认是auto 找到资源中的TypeLib,其中的文件可以Export成bin,这个bin就是tlb,保存的时候使用将扩展名指定为tlb即可 ...

    WTL 9.1 5270 ReadMe 中文 汉化 中英文对照版 01d

    WTL9.1-ReadMe-中英文对照版 Windows Template Library - WTL Version 9.1 (build 5270) 2015-09-27 Windows模板库 - WTL Version 9.1 (build 5270) 2015-09-27 (水平有限,不足之处,欢迎指正交流:ybmj@vip.163....

Global site tag (gtag.js) - Google Analytics