Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++模板类、头文件和重复错误_C++_Visual Studio 2012_Compiler Errors - Fatal编程技术网

C++模板类、头文件和重复错误

C++模板类、头文件和重复错误,c++,visual-studio-2012,compiler-errors,C++,Visual Studio 2012,Compiler Errors,当我有一个完全在头文件模板类型中声明的类,并且该头文件包含在多个cpp源文件中时,每个包含头文件的源文件都会报告一次编译错误。所以,如果我有一个在8个不同位置使用的头,每个错误报告8次 建议?我是否必须忍受这种情况,我做错了吗,还是怎么了 编辑 除了通常令人讨厌之外,在VS.Yay中,当鼠标悬停在红色的曲线上时,这也会弄乱错误弹出窗口 使用Visual Studio 2012时,不允许多次包含同一文件。例如 福班 包括测试 分类栏 包括测试 福巴级 包括酒吧 包括foo foobar将抛出错误,

当我有一个完全在头文件模板类型中声明的类,并且该头文件包含在多个cpp源文件中时,每个包含头文件的源文件都会报告一次编译错误。所以,如果我有一个在8个不同位置使用的头,每个错误报告8次

建议?我是否必须忍受这种情况,我做错了吗,还是怎么了

编辑

除了通常令人讨厌之外,在VS.Yay中,当鼠标悬停在红色的曲线上时,这也会弄乱错误弹出窗口


使用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中定义的,而不是在头中定义的-您将得到链接器错误。