我有一个名为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中定义了...你能指出我做错了什么吗?
答案 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的原因。