C ++模板头文件cpp分离,将* .cpp包含到* .h中的解决方案不再起作用

尤努斯

我想将.h和.cpp分开作为模板类。这是我在做什么:

  1. 我直接写.h和.cpp就像没有模板一样。因此它创建了一个异常,例如Link 2019 Template异常
  2. 有一些解决方案可以解决如何定义模板类头并在另一个cpp中实现它我选择解决方案3。
  3. 根据我在标题中#endif之前添加* .cpp的解决方案。(仍然* .cpp包括* .h)(下面的代码表示此步骤)它给出

    模板已被定义为错误。

  4. 根据研究,消除此错误的方法是(循环依赖)从* .cpp中删除#include * .h,但这一次

    无法识别的模板声明/定义错误

被占领。我的问题是我是否将* .cpp包含到* .h文件中。我们如何按预期构建项目?还是这个解决方案是绝对的?

// TestTemp.h
#ifndef _TESTTEMP_H_
#define _TESTTEMP_H_
template<class T>
class TestTemp
{
public:
    TestTemp();
    void SetValue(T obj_i);
    T Getalue();
private:
    T m_Obj;
};
#include "TestTemp.cpp"

#endif

// TestTemp.cpp
#include "TestTemp.h"
template <class T>
TestTemp<T>::TestTemp()
{
}
template <class T>
void TestTemp<T>::SetValue(T obj_i)
{
}

template <class T>
T TestTemp<T>::Getalue()
{
    return m_Obj;
}

#include "TestTemp.h"

int main()
{
    TestTemp<int> a;
    a.Getalue();
    return 0;
}
皮特·贝克尔

与普通类的成员函数不同,模板类的成员函数不能单独编译并链接到可执行文件中。模板的成员在使用时必须对编译器可见。那就是那篇可怕的文章中所有荒谬的东西。

最简单的方法是将定义直接放入模板定义中:

#ifndef TEST_H
#define TEST_H

template <class Ty>
class test {
public:
    void f() { /* whatever */ }
};
#endif

这样做的缺点是较大的类变得不可读(参见Java)。因此,下一步是将定义移出模板,但将其保留在标题中:

#ifndef TEST_H
#define TEST_H

template <class Ty>
class test {
public:
    void f();
};

template <class Ty>
void test<Ty>::f() { /* whatever */ }

#endif

许多人认为这仍然太混乱了,并希望将定义放入单独的文件中。没关系,但是无论何时使用原始标头,您都必须确保包含该单独的文件:

#ifndef TEST_H
#define TEST_H

template <class Ty>
class test {
public:
    void f();
};

#include "test.imp"

#endif

这是文件“ test.imp”:

#ifndef TEST_IMP
#define TEST_IMP

template <class Ty>
void test<Ty>::f() { /* whatever */ }

#endif

请注意,“ test.imp”实际上是一个头文件,因此它通过中的#include "test.imp"指令进入您的代码test.h它不能单独编译,所以应该不会有被命名.cpp的扩展,这充其量是误导。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++模板标头cpp分离,将* .cpp插入* .h的解决方案不再起作用

来自分类Dev

如何将具有自动返回类型的功能从头文件包含到多个cpp文件中

来自分类Dev

将 Boost 标头包含到 .h 文件中但不包含在 .cpp 文件中时发生错误

来自分类Dev

为什么C ++ Windows Store应用程序头文件对cpp文件中的包含感到满意?

来自分类Dev

C++ 编译不同的 .cpp 文件,将它们包含在头文件中

来自分类Dev

将仅包含头文件的库包含在单个 cpp 文件中

来自分类Dev

将外部 .asm 文件包含到 C++ 代码中

来自分类Dev

将C ++类分为头文件和cpp文件

来自分类Dev

将头文件包含到静态库中

来自分类Dev

C ++使用cpp中的头文件中的引用函数?

来自分类Dev

试图将C库包含到Promela模型中

来自分类Dev

将头文件包含到头文件中,而不将其内容暴露给includer

来自分类Dev

用txt文件中的字符串填充数组[XCode6 Beta1的解决方案不再起作用]

来自分类Dev

将文件包含到PHP类中

来自分类Dev

将文件内容包含到属性中?

来自分类Dev

根据解决方案配置将文件包含到项目中

来自分类Dev

为什么C ++头文件不需要包含实现文件(.cpp)?

来自分类Dev

将Python.h嵌入/包含到C ++中[完整指南](Python 3.9)(Windows)(Qt 5.15)

来自分类Dev

什么是c ++中的成员函数?它包含主体吗?是在.h还是.cpp文件中定义的?

来自分类Dev

将类分为头文件(.h)和源文件(.cpp)的问题

来自分类Dev

如何在某些头文件的CPP文件中包含我的实现(嵌套类)

来自分类Dev

在 main.cpp 以外的文件中包含头文件时出现链接器错误

来自分类Dev

无法将Objective C文件包含到项目中吗?

来自分类Dev

将托管C#DLL包含到非托管C ++ DLL中-全部集中在一个文件中

来自分类Dev

将托管的C#DLL包含到非托管的C ++ DLL中-全部集中在一个文件中

来自分类Dev

C# Visual Studio 2008,将 DLL 包含到 exe 中?

来自分类Dev

将这些变量包含到cmake中

来自分类Dev

将JSP包含到吊索servlet中

来自分类Dev

将meta包含到JSF中

Related 相关文章

  1. 1

    C ++模板标头cpp分离,将* .cpp插入* .h的解决方案不再起作用

  2. 2

    如何将具有自动返回类型的功能从头文件包含到多个cpp文件中

  3. 3

    将 Boost 标头包含到 .h 文件中但不包含在 .cpp 文件中时发生错误

  4. 4

    为什么C ++ Windows Store应用程序头文件对cpp文件中的包含感到满意?

  5. 5

    C++ 编译不同的 .cpp 文件,将它们包含在头文件中

  6. 6

    将仅包含头文件的库包含在单个 cpp 文件中

  7. 7

    将外部 .asm 文件包含到 C++ 代码中

  8. 8

    将C ++类分为头文件和cpp文件

  9. 9

    将头文件包含到静态库中

  10. 10

    C ++使用cpp中的头文件中的引用函数?

  11. 11

    试图将C库包含到Promela模型中

  12. 12

    将头文件包含到头文件中,而不将其内容暴露给includer

  13. 13

    用txt文件中的字符串填充数组[XCode6 Beta1的解决方案不再起作用]

  14. 14

    将文件包含到PHP类中

  15. 15

    将文件内容包含到属性中?

  16. 16

    根据解决方案配置将文件包含到项目中

  17. 17

    为什么C ++头文件不需要包含实现文件(.cpp)?

  18. 18

    将Python.h嵌入/包含到C ++中[完整指南](Python 3.9)(Windows)(Qt 5.15)

  19. 19

    什么是c ++中的成员函数?它包含主体吗?是在.h还是.cpp文件中定义的?

  20. 20

    将类分为头文件(.h)和源文件(.cpp)的问题

  21. 21

    如何在某些头文件的CPP文件中包含我的实现(嵌套类)

  22. 22

    在 main.cpp 以外的文件中包含头文件时出现链接器错误

  23. 23

    无法将Objective C文件包含到项目中吗?

  24. 24

    将托管C#DLL包含到非托管C ++ DLL中-全部集中在一个文件中

  25. 25

    将托管的C#DLL包含到非托管的C ++ DLL中-全部集中在一个文件中

  26. 26

    C# Visual Studio 2008,将 DLL 包含到 exe 中?

  27. 27

    将这些变量包含到cmake中

  28. 28

    将JSP包含到吊索servlet中

  29. 29

    将meta包含到JSF中

热门标签

归档