包含头文件

时间:2011-09-27 10:25:15

标签: c++ visual-c++ header-files

我有一个名为functions.h的文件....现在我知道在头文件中定义函数是不明智的,但与出现的问题相比,这是我最不关心的...

我在一个名为

的functions.h中定义了一个函数
 void sayhi()
{
  cout<<"hi";
}

现在我创建了一个lines.h文件,其函数在lines.cpp文件中定义...在lines.cpp文件中我包含了functions.h ...并使用了sayhi();在行类的构造函数中...然后在mymain.cpp(包含int main)中我再次包含了functions.h,在主要的我称为sayhi();

但是当我编译程序时,它在mymain.cpp中显示错误,告诉sayhi()已经在lines.obj中定义了...你能指出我做错了什么吗?

2 个答案:

答案 0 :(得分:7)

嗯,解决方法是在functions.h中声明函数,然后在functions.cpp中定义,就像大自然所希望的那样。

答案 1 :(得分:3)

使您的函数inline避免了这个多重定义问题。

尝试,

inline void sayhi()
{
  cout<<"hi";
}

This链接可能对您有所帮助。

特别是,它引用了ISO C ++标准的第7.1.2节:

  

应在每个翻译单元中定义内联函数   它被使用,并且在每种情况下都具有完全相同的定义   (3.2)。

这就是规避one-definition-rule的原因。