如何在另一个文件中使用内联函数?

时间:2014-02-24 05:00:18

标签: c++

我有以下文件:

//utils.hpp
namespace Utils {
  inline void saveFile(FileInfo &);
}

和实施:

//utils.cpp
#include "./utils.hpp"
inline void Utils::saveFile(FileInfo & f) {}

和main.cpp

#include "./utils.hpp"
int main(){
  //...
  Utils::saveFile(f);
}

但是当我尝试编译时,它给了我错误:

main.cpp.o: In function `main':
main.cpp:(.text+0x358): undefined reference to `Utils::savePPMFile(FileInfo &)'
collect2: ld returned 1 exit status
make[2]: *** [simpletest] Error 1
make[1]: *** [CMakeFiles/simpletest.dir/all] Error 2
make: *** [all] Error 2

如果我删除inline,一切正常......如何使用内联函数?

3 个答案:

答案 0 :(得分:5)

必须在使用它们的每个翻译单元中定义内联函数。将定义放在标题中,或删除inline说明符。

答案 1 :(得分:1)

如果你想拥有内联函数并且仍然希望保持头文件干净,你可以在另一个文件中实现内联函数(它可以是任何扩展名,Microsoft对这些文件使用.inl扩展名)并包含在头文件的末尾,如下所示。

//utils.hpp       
namespace Utils {
 inline void saveFile(FileInfo &);
}
#include "utils.inl"

在utils.inl文件中

//utils.inl
inline void Utils::saveFile(FileInfo & f) {}

现在您可以在主程序中使用util.hpp。 util.inl自动包含在主cpp文件中。

#include "./utils.hpp"
int main(){
 //...
 Utils::saveFile(f);
}

答案 2 :(得分:0)

内联函数不能在.obj文件中使用。