C++中头文件中的函数定义

ven*_*rty 2 c++

我有C++项目,它包含多个(实际上很多).cpp和.h文件.在编写头文件时,我有一个文件如下

例如,MyHeaderFile.h

#ifndef _MYHEARDERFILE_H
#define _MYHEARDERFILE_H

// Here i have function defintion.
void myFunc() {cout << "my function" << endl; }

#endif
Run Code Online (Sandbox Code Playgroud)

上面的文件包含在多个文件中.在编译时我得到了"myfunc"的多重定义"错误.我希望标题只包含一次,因为我有#ifndef检查所以我期待错误不应该被抛出.

例如,在模板的情况下,我们必须在头文件中定义,在这种情况下我们如何避免我现在面临的问题?

任何人都可以帮助我,为什么我看到错误?我的理解对吗?

谢谢!

Oli*_*rth 7

通常,将函数声明放在头文件中,并在源文件中放置函数定义(即实际的函数体/实现).否则,您将得到您正在看到的问题:头文件被#included(即替换)为多个源文件,因此该函数最终被定义多次.这会混淆链接器,所以它会抱怨.

标头保护#ifndef ...内容仅防止标头多次被替换到同一源文件中.请记住,每个源文件都是完全独立于其他源文件编译的; 所有#defines和其他定义都为每个定义"重置".

一种可能的替代解决方案是将函数定义保留在头文件中,而只是将其标记inline(这具有消除链接器错误的副作用).但是,就个人而言,我不会这样做.