仅标题内联函数库内联不起作用

时间:2016-01-15 19:41:05

标签: c++

我正在努力完成我的图书馆设计。我想创建一个在我未来的项目中使用的库(目前只有标题......)

我有这个文件结构:

C:\Libs\MYLIB
   - Tools.hpp
   - Tools.cpp

代码如下所示:

Tools.hpp

#pragma once
    class Tools
    {
        public:
            Tools();
            ~Tools();
    };

Tools.cpp

#include "Tools.hpp"

inline Tools::Tools()
{
}

inline Tools::~Tools()
{
}

然后还有另一个项目,在一个完全不同的文件夹中,包括这个文件:

#include <MYLIB/Tools.hpp>

int main()
{
    Tools t;

    return 0;
}

但我总是得到这个错误:

  

Tools::Tools()' undefined reference to工具::〜工具()&#39;

的未定义引用

当我创建一个.hpp文件时,只在我的类中使用内联实现,如下所示:

#pragma once
class Tools
{
    public:
        Tools(){};
        ~Tools(){};

        void DoSomething(){};
};

它有效(所以我的包含路径是正确的),但我不想膨胀我的.hpp文件(我想稍后使用doxygen,并保持我的声明实现)。

我知道使用内联可以被编译器忽略,我猜这是怎么回事?!那么创建私有头文件库的最佳方法是什么?

我的规格: 使用CodeLite赢得10 MinGW(g ++)

另一个问题: 这一行应该在Tools.cpp中吗?

#include "Tools.hpp"

最好是这样的:

#include <MYLIB/Tools.hpp>

1 个答案:

答案 0 :(得分:0)

您可以使用ad-hoc静态库,这对于小型和/或经常更改的库来说非常方便,因此与单独进行版本控制/编译/分发的开销相比,它们不会带来太多好处。我们的想法是您正常地将标题/来源分开,但您只需#include.cpp文件中的一个翻译单元。请注意,这种技术有其优点,但也有限制!