最好不要在头文件中写函数定义

我们都知道static声明静态函数在别的文件是不可以使用的,但是如果你将定义也写在.h文件下是不是还是这样的呢,或者说编译器会不会提示你这样是有问题的呢?结果却是将static函数的定义直接写在了file.h的头文件中,导致staic关键字失效,代码如下。

//file1.h
#include <iostream>
using namespace std; static void fun() { cout << "static fun." << ends; }
//main.cpp
#include file1.h
int main()
{
    fun();
    return 0;
}

 

那么我们改下代码,就会提示编译错误,所以不要在头文件下定义,#include会将它合并到main.cpp的前再编译的

//file1.h
#include <iostream>
using namespace std;
static void fun();
//file1.cpp
#include "file1.h"
static void fun()
{
  cout << "static fun." << endl;
}
#include "file1.h"
//
main.cpp int main() { fun(); return 0; }

  总结一下:说到头文件就一定会想到头文件的用法#include...,做c/c++编程的对#include指令都不会陌生,绝大多数人也都知道如何使用,但我相信仍有人对此是一知半解的,#include <stdio.h> #include <iostream>,这两行代码我们在c和c++程序第一行基本都会包含。包含指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c、.hpp、.cpp、.hxx、.cxx等,甚至.txt、.abc等等都可以。预处理器发现 #include 指令后,就会寻找指令后面<>或“”中的文件名,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源代码文件中的#include 指令, 就像你把被包含文件中的全部内容键入到源文件中的这个位置一样。

目录

  1. c++(翁恺浙大公开课) 笔记0
  2. static在cc++中的作用(翁恺c++公开课[28-29]学习笔记)
  3. c++对象初始化(翁恺c++公开课[10])
  4. c++构造函数的初始化列表(翁恺c++公开课[13])
  5. c++继承:公有、私有、保护
  6. c++子类父类关系(翁恺c++公开课[15-16]学习笔记)
  7. c++拷贝构造函数(翁恺c++公开课[26-27]学习笔记)
  8. c++多态性及多态的内部实现(翁恺c++公开课[23-24])
  9. c++中的运算符重载operator1(翁恺c++公开课[30]学习笔记)
  10. c++中的运算符重载operator2(翁恺c++公开课[31-33]学习笔记)
  11. c++模板(翁恺c++公开课[34-35]学习笔记)
  12. 最好不要在头文件中写函数定义
原文地址:https://www.cnblogs.com/go-ahead-wsg/p/12115933.html