我有以下文件:
//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
,一切正常......如何使用内联函数?
答案 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文件中使用。