C++为什么不能把函数实现放在头文件里?
以前一直觉得这样写不符合规范,因为头文件可能会expose给client,但是实现不应该expose给client;这是一个隐藏技术细节(或者机密)的问题。
最近偷懒,把实现放在头文件里,发现还有一个c++编译的原因。
Hi.h
#pragm once
Void Hi()
{Printf(“hello”);}
a.cpp
#include “Hi.h”
Void A() {Hi();}
b.cpp
#include “Hi.h”
Void B() {Hi();}
work.cpp
//…
Main()
{
A();
B();
}
这里Hi的实现放在了.h文件,compile的时候会出现 duplicate实现的error。
根源是什么呢?编译的时候,a.cpp,b.cpp和work.cpp分别被compile成不同的object文件,然后做linkÿ