Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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
C2977:';std::tuple';:模板参数太多(MSVC11) 我试图用Visual C++ 11构建GooGestEt,但是下面的代码会导致错误 template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t, // <-- error C2977 ::std::ostream* os) { PrintTupleTo(t, os); }_C++_Visual Studio 2012_C++11_Tuples_Variadic Templates - Fatal编程技术网

C2977:';std::tuple';:模板参数太多(MSVC11) 我试图用Visual C++ 11构建GooGestEt,但是下面的代码会导致错误 template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t, // <-- error C2977 ::std::ostream* os) { PrintTupleTo(t, os); }

C2977:';std::tuple';:模板参数太多(MSVC11) 我试图用Visual C++ 11构建GooGestEt,但是下面的代码会导致错误 template <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9> void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t, // <-- error C2977 ::std::ostream* os) { PrintTupleTo(t, os); },c++,visual-studio-2012,c++11,tuples,variadic-templates,C++,Visual Studio 2012,C++11,Tuples,Variadic Templates,还有实用程序-文件的第72行: template<class = _Nil, _MAX_CLASS_LIST> class tuple; // Line 72 模板 类元组;//第72行 std::tuple有什么问题,如何解决 (顺便说一句:我试图将std::tr1::tuple更改为std::tuple)在中检查此条目,但未成功。VC++11不支持可变模板。他们有一种叫做人造变量的东西。向下滚动,您将看到一段关于仿变量的内容,其中谈到了元组。在这一段中,他们说默认的最大

还有
实用程序
-文件的第72行:

template<class = _Nil, _MAX_CLASS_LIST>
   class tuple; // Line 72
模板
类元组;//第72行
std::tuple
有什么问题,如何解决


(顺便说一句:我试图将
std::tr1::tuple
更改为
std::tuple

在中检查此条目,但未成功。VC++11不支持可变模板。他们有一种叫做人造变量的东西。向下滚动,您将看到一段关于仿变量的内容,其中谈到了元组。在这一段中,他们说默认的最大参数数是5。您可以将其增加到10:

您可以在5到10(包括5到10)之间定义_VARIADIC_MAX project wide(最大项目宽度)(默认为5)。增加它将使编译器消耗更多内存,并且可能需要使用/Zm选项为pche保留更多空间


他们说他们有一个修复程序,可以再次将默认值设为10。

设置
GTEST\u在GTEST.h中将TUPLE设置为0有帮助

更新:当然,侵入性较小的方法是定义一个预编译器标志GTEST_HAS_TR1_TUPLE=0。检查有关
\u VARIADIC\u MAX=10的答案-解决了问题的另一半。

在Visual Studio 2012(VC11)中
\u VARIADIC\u MAX
在标题中默认定义为5


您可以将10更改为6~10中的任何数字。

这在r675版本中是固定的。请参见将下面的行添加到cmake文件中

add_definitions(/D_VARIADIC_MAX=10)

在Visual Studio 2013中,
std::tuple
不再使用
\u VARIADIC\u MAX
,现在使用实际的variardic
模板,因此这个问题应该消失了


如果您在2013年遇到它,这意味着您包含了错误的标准库。

要在Visual Studio 2012中使用GoogleTest,您应该在Properties->C/C++->Preprocessor->PreprocessDefinitions下为使用它的项目设置_VARIADIC_MAX=10。 否则您可能会遇到以下错误
错误C2977:“std::tuple”:模板参数太多

是否包括
?VisualStudio的
std::tuple
最多支持10种类型,因此应该编译它。它还应该通过using语句位于
std::
名称空间中,这让我觉得要么没有包含
,要么VS11有问题。提醒一下,如果元组的成员超过5个。为了可读性,您可能更喜欢使用命名成员定义类,而不是使用get(aTuple)。对于大多数情况,默认的copy-ctor和operator=已经足够好了。他们应该只实现可变模板,而不是修复设计中出现的问题。@rubenvb如果某个东西发生了重大变化,人们因为支持“旧”的变化而大喊你不支持某些功能,你怎么能实现它呢?C++草图设置最小参数数为10。事实上,以下是GCC作者所写的“在GCC标准库实现中,过多的编译时间迫使支持的参数的最大数量从原来的20个恢复到标准草案[10]允许的最小值10个。”()@Ark kun你读过答案或它链接到的博客文章了吗?MSVC 2012没有可变模板(除非您想尝试11月实验性CTP,在这种情况下,如果没有真正的可变模板支持,库标题可能仍然会被破坏)。我的评论不是关于模板参数的数量,而是关于实现本身。2013年,我对2008年的一篇文章不感兴趣。@ruvenvb产品开发有一定的势头。Visual Studio 2012在其开发开始时正确实现了标准草案。然后,C++草稿改变了。C++11标准发布于2011年8月(MSDN博客发布前一个月),当时在产品周期中重新实现和重新测试一个非常复杂的功能(如可变模板)有点太晚了。我的观点是,当标准刚刚改变(或尚未发布)时,不要责怪产品“非标准”的特性实现。“我喜欢这个答案,不影响代码的其余部分(”(P.S.微软吮吸)。我们在Visual C++ 2012中将无限性从10降低到5,以便提高大多数用户的编译时间。(我们提供了一种通过宏_VARIADIC_MAX请求旧限制10的方法)在Visual C++ 2013中,我们彻底地消除了伪变量宏。如果你想使用50种类型的元组,现在可以使用它们。此外,我很高兴地宣布,将STL转换到真正的可变模板,可以提高编译时间,减少编译器内存消耗。这是迄今为止最好的和最干净的答案,Yo。你是应该得到这个记号的人。谢谢你,伙计。别忘了加一个分号_VARIADIC_MAX=10;
#if !defined(_VARIADIC_MAX)
 #define _VARIADIC_MAX  5

#elif _VARIADIC_MAX < 5 || 10 < _VARIADIC_MAX
 #error _VARIADIC_MAX must be between 5 and 10, inclusive
#endif /* !defined(_VARIADIC_MAX) */
_VARIADIC_MAX=10;
add_definitions(/D_VARIADIC_MAX=10)