C++笔记之头文件中直接定义函数报错与否

首先来说一下问题:

我想直接在.h内定义函数并且在main.cpp里面调用,但是出现了问题,代码如下。

.h文件代码:

#pragma once
#include<iostream>
void Conbine(int a, int b)
{
	std::cout << a + b << std::endl;
}
.cpp文件代码:

#include"A.h"
main.cpp文件代码:

#include"A.h"
using namespace std;
int main()
{
	int a = 1, b = 2;
	Conbine(a, b);
	return 0;
}
编译时提示:



错误提示的意思就是说Conbine函数重定义了。


接下来说一下编译器编译C++代码时的编译流程:

编译器会先独立的编译每个.cpp文件,生成对应的目标文件,然后目标文件进行链接后生成exe可执行文件


正是由于编译器的编译流程是这样所以导致了上面代码的编译错误


因为编译器独立编译每个.cpp文件,所以在编译的时候并不会报错,但是在链接的时候,由于每个目标文件中都有Conbine函数的实现,所以编译器就会说重定义


解决方法有多种

第一种是只在一个.cpp文件中包含该头文件,比如说删掉上面代码中.cpp文件中的#include"A.h"

第二种是采用分离式编译,将函数的实现放在A.h对应的A.cpp中


在头文件中能不能直接写函数的定义呢?

内联函数是可以写在头文件中的,并且只能写在头文件中,原因是编译器在编译内联函数的时候,需要将内联函数展开,要是在头文件中没有定义,就不能展开,

编译器将报错

猜你喜欢

转载自blog.csdn.net/zhc_futrue/article/details/78441354