gpt4 book ai didi

C++::#include:ing 多个源文件中的模板类头文件?

转载 作者:可可西里 更新时间:2023-11-01 18:31:03 27 4
gpt4 key购买 nike

我正在将此类与模板成员函数一起使用——除了一个——模板成员函数,这些成员函数将用于具有多个源文件的项目,这些文件在编译时被链接。模板类型未知,几乎可以采用任何类型。在这种情况下,我有两个使用该类的源文件,因此带有类声明和定义的头文件在两个源文件中都是#include:ed。然后我在类的非模板成员函数声明中得到错误“多重定义”。我认为这是因为它在链接过程中被定义了两次,因为两个源文件都定义了非模板成员函数。想象一下下面的无意义场景:

注意:假设所有文件都包含保护并且 iostream 在需要的地方#include:ed。

foo.hpp

class foo
{
public:
template <typename X>
void f(X);

void ff ();
};

#include "foo.tpp"

foo.tpp

template <typename X>
void foo::f(X val)
{
cout << val;
}

void foo::ff() // multiple definitions
{
cout << sizeof(*this);
}

ma​​in2.cpp

#include "foo.hpp"

main.cpp

#include "foo.hpp"

int main()
{
return 0;
}

在函数定义中添加 inline 关键字似乎解决了这个错误,尽管我不想使用它,因为我有其他非模板成员函数也遇到同样的问题,它们更大并且在多个中被引用部分代码。是否有任何解决方法或有效的方法来做我想做的事情?提前致谢!

最佳答案

创建第三个 foo.cpp 文件,用于定义未声明为 inline 的非模板函数。该类是非模板的,因此您无需在 header 中定义其所有成员函数,只需定义模板函数(或 maybe not )即可。

关于C++::#include:ing 多个源文件中的模板类头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38796242/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com