C++模板类、头文件和重复错误
当我有一个完全在头文件模板类型中声明的类,并且该头文件包含在多个cpp源文件中时,每个包含头文件的源文件都会报告一次编译错误。所以,如果我有一个在8个不同位置使用的头,每个错误报告8次 建议?我是否必须忍受这种情况,我做错了吗,还是怎么了 编辑 除了通常令人讨厌之外,在VS.Yay中,当鼠标悬停在红色的曲线上时,这也会弄乱错误弹出窗口C++模板类、头文件和重复错误,c++,visual-studio-2012,compiler-errors,C++,Visual Studio 2012,Compiler Errors,当我有一个完全在头文件模板类型中声明的类,并且该头文件包含在多个cpp源文件中时,每个包含头文件的源文件都会报告一次编译错误。所以,如果我有一个在8个不同位置使用的头,每个错误报告8次 建议?我是否必须忍受这种情况,我做错了吗,还是怎么了 编辑 除了通常令人讨厌之外,在VS.Yay中,当鼠标悬停在红色的曲线上时,这也会弄乱错误弹出窗口 使用Visual Studio 2012时,不允许多次包含同一文件。例如 福班 包括测试 分类栏 包括测试 福巴级 包括酒吧 包括foo foobar将抛出错误,
使用Visual Studio 2012时,不允许多次包含同一文件。例如 福班 包括测试 分类栏 包括测试 福巴级 包括酒吧 包括foo
foobar将抛出错误,因为它包含一个将在测试中拉入一次的bar,然后当它尝试包含foo时,它将再次尝试包含测试 关于声明的类,它是否包含所有方法的定义 无论是“是”,那么你应该在你的类之外声明你的函数,只在你的类中保留原型,因为你似乎在你的每一个包含中重新定义它们,导致了一个错误,尽管你应该向我们提供更多关于你得到的错误的信息
//.h
//type as int, double or anything
template<type N>
class Foo
{
public:
template<typename T>
void foo_fct();
};
//.cpp
#include ".h"
template<type N>
template<typename T>
void Foo<N>::foo_fct()
{
//stuff here
}
这应该可以解决问题。我很少使用visual studio,但是您不能预编译标题,然后只获取一次错误吗?这实际上是一个问题吗?一旦错误被修复,它会消失在任何地方,不是吗?“这些错误是故意的,要求他们留在那里吗?”塞拉斯听起来很有趣。我不知道这是一个选择。去研究了。@大部分情况下是难以捉摸的,它既混乱又烦人。你可以,这就是包括警卫在内的防范措施。你一定是一只凤凰。我已经在用它了。出现此问题的原因是头包含在多个独立编译的CPP文件中。这不是一个多重包含问题。是的,然后在.cpp文件中在类之外定义方法。你可以在cpp文件中定义模板成员,但你必须跳转以避免链接器错误。当编译器评估模板时,它需要有关实现的信息。如果它不能得到它-例如,如果它是在另一个cpp中定义的,而不是在头中定义的-您将得到链接器错误。