首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

VS2015 - 'F‘的编译错误:非类型模板参数’F‘的类型非法

VS2015 - 'F'的编译错误:非类型模板参数'F'的类型非法是指在使用Visual Studio 2015进行编译时,出现了一个关于非类型模板参数'F'类型非法的错误。

非类型模板参数是指在模板中使用的参数,其类型可以是整数、枚举、指针或引用,但不能是类类型。在这个错误中,'F'被定义为非类型模板参数,但其类型被认为是非法的。

要解决这个错误,可以考虑以下几个方面:

  1. 检查模板参数的定义:确保'F'的定义符合非类型模板参数的要求。非类型模板参数的类型必须是编译时可确定的,不能是类类型。
  2. 检查模板参数的使用:确保在使用'F'作为非类型模板参数时,其类型符合要求。可能需要对代码进行调整,以满足非类型模板参数的类型要求。
  3. 检查编译器版本和设置:确认使用的是Visual Studio 2015,并检查编译器的设置是否正确。有时候,编译器的设置可能会导致非类型模板参数的类型被认为是非法的。

总结起来,解决VS2015 - 'F'的编译错误:非类型模板参数'F'的类型非法的方法是检查模板参数的定义和使用,确保其类型符合非类型模板参数的要求,并确认编译器的设置正确。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

非类型模板参数模板特化模板分离编译

1.非类型模板参数 模板参数分为类型形参与非类型形参: ①类型形参即:出现在模板参数列表中,跟在class或者typename之类参数类型名称,即我们平时写class T之类非类型形参...浮点数、类对象以及字符串是不允许作为非类型模板参数。 ②. 非类型模板参数必须在编译期就能确认结果 ③非类型模板参数基本上只适用于整型,是个整型常量!...看下面实例代码:我们可以通过非类型模板参数去灵活地定义数组空间大小!...③函数名后跟一对尖括号,尖括号中指定需要特化类型 ④函数形参表: 必须要和模板函数基础参数类型完全相同,如果不同编译器可能会报一些奇怪错误 //基础函数模板 ① template<class...,而是可以针对模板参数更进一步条件限制所设计出来一个特化版本,比如我可以限制泛T只能推演成指针类型或引用类型

1.2K20

【C++】非类型模板参数模板特化、模板分离编译模板总结

一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参:出现在模板参数列表中,跟在class或者typename之类参数类型名称。...,写死了,所以这时候我们可以使用非类型模板参数 非类型形参:就是用一个常量作为类(函数)模板一个参数,在类(函数)模板中可将该参数当成常量来使用。...) 非类型模板参数必须在编译期就能确认结果 实际上库里面的array也是非类型模板: 库里面的array与C语言数组相比: int main() { int a1[10];...: 必须要先有一个基础函数模板 关键字template后面接一对空尖括号 函数名后跟一对尖括号,尖括号中指定需要特化类型 函数形参表: 必须要和模板函数基础参数类型完全相同,如果不同编译器可能会报一些奇怪错误...增强了代码灵活性。 缺点:模板会导致代码膨胀问题,也会导致编译时间变长。出现模板编译错误时,错误信息非常凌乱,不易定位错误

27221
  • 【c++】模板进阶> 非类型模板参数&&模板特化&&模板分离编译详解

    非类型模板参数 模板参数分类类型形参与非类型形参 类型形参:出现在模板参数列表中,跟在class或者typename之类参数类型名称 非类型形参:就是用一个常量作为类(函数)模板一个参数,在类(函数...非类型模板参数必须在编译期就能确认结果 2....模板特化 2.1 概念 通常情况下,使用模板可以实现一些与类型无关代码,但对于一些特殊类型可能会得到一些错误结果,需要特殊处理,比如:实现了一个专门用来进行小于比较函数模板 // 函数模板...函数形参表: 必须要和模板函数基础参数类型完全相同,如果不同编译器可能会报一些奇怪错误 // 函数模板 -- 参数匹配 template bool Less(T left, T...出现模板编译错误时,错误信息非常凌乱,不易定位错误

    12310

    C++初阶:模版相关知识进阶内容(非类型模板参数、类模板特化、模板分离编译

    结束了常用容器介绍,今天继续模版内容讲解: 1.非类型模版参数 模板参数可以大致分为:分类类型形参与非类型形参。...类型形参即:出现在模板参数列表中,跟在class或者``typename`之类参数类型名称 非类型形参,就是用一个常量作为类(函数)模板一个参数,在类(函数)模板中可将该参数当成常量来使用 #include...MyArray my; my.print(); } int main() { test1(); return 0; } 注意: 浮点数、类对象以及字符串是不允许作为非类型模板参数...非类型模板参数必须在编译期就能确认结果。 2.模板特化 2.1模版特化引入和概念 通常情况下,使用模板可以实现一些与类型无关代码,但对于一些特殊类型可能会得到一些错误结果,需要特殊处理。...如果将模板声明和实现分离到不同文件,编译器在实例化时就无法找到完整定义,从而导致编译错误

    17310

    C++核心准则编译边学-F.19 对于只传递不处理参数,使用模板类型TP&&并在传递时使用std::forward

    F.19: For "forward" parameters, pass by TP&& and only std::forward the parameter(对于只传递不处理参数,使用模板类型TP...return s } 右值引用作为参数类型使用时候,首先被实参初始化,其结果是实参将无效化(右值引用定义)。...在这种情况下,也只有在这种(右值引用参数只传递不使用)情况下,将TP参数定义为TP&&(这里TP是模板类型)--这样可以无视并维持常量特性和右值特性。...TP&&类型参数本质上总是应该在函数体中通过std::forward继续传递。 译者注:最终还是要被某段代码作为左值使用。...在下面情况下发出警示:对于函数使用TP&&类型参数(这里TP是模板类型参数名),除了在所有静态路径上精确地执行一次std::forward操作以外执行了任何(针对改参数)其他处理。

    1.2K00

    C++20新特性个人总结

    ,新增自定义查找规则  2.17  放宽基于范围for循环,新增自定义范围方法  2.18  类类型非类型模板参数  关于类类型非类型模板参数优化  类类型非类型模板参数条件(满足任意一个)...  聚合初始化推导类模板参数  2.28  隐式地将返回本地变量转换为右值引用  2.29  允许default修饰运算符按值比较  2.30  非类型模板参数等效条件  3  宏  4  属性 ...功能类似于C#约束,但是比C#泛约束更为强大。  concept用于声明具有特定约束条件模板类型。 ...  比较拗口,放松了非类型模板参数限制,可以用类类型作为模板参数,但是条件是所需要运算需要在编译期完成。 ...    friend bool operator==(C, C) = default; // C++20起支持 };  2.30  非类型模板参数等效条件  相同类型两个值,模板参数等效条件(之一

    1.9K50

    【Example】C++ Template (模板)概念讲解及编译避坑

    C++ 不同于 Java,它没有标准 Object 类型。也就意味着 C++ 并不存在完整编程概念。 先讲 “部分” 泛编程概念实现方式:模板。 什么是模板?...引用 Microsoft Docs: 模板是 c + + 中编程基础。 作为强类型语言,c + + 要求所有变量都具有特定类型,由程序员显式声明或由编译器推断。...总结:模板是 C++ 当中支持参数类型与返回值动态化工具,使开发人员可以动态自定义函数、类中参数与返回值类型模板又分为两种:函数模板 与 类模板。...进行在模板函数调用时,编译器会根据变量类型推断函数参数类型。 那么,函数模板是否可以支持多种类型呢?可以!...当你参数类型需要两种或以上时候,就是在 template 当中增加声明,再对函数或类进行修饰: template 那么,除了基本数据类型

    72420

    第 16 章 模板与泛编程

    ---- 16.1 定义模板 面向对象编程能处理类型在程序运行之前都未知情况,动态联编。而泛编程中,在编译时就能获知其类型,静态联编。...// 错误,U之前必须加上 class或 typename template T calc(const T&, const U&); 除了定义类型参数,还可以在模板中定义非类型参数...因为编译器需要在编译时实例化模板,此时非类型参数会被一个用户提供编译器推断出值所代替,所以这些值必须是常量表达式。 非类型参数可以是一个整型,对应模板实参必须是常量表达式。...第一个阶段是编译模板本身时。这个阶段,编译器可以检查语法错误,如忘记分号或者变量名拼错等。 第二个阶段是编译器遇到模板使用时。对于函数模板调用,会检查实参数目是否正确和参数类型是否匹配。...对于类模板,则只检查模板参数目是否正确。 第三个阶段是模板实例化时,只有这个阶段才能发现类型相关错误。依赖于编译器如何管理实例化,这类错误可能在链接时才报告。

    1.4K60

    第 16 章 模板与泛编程

    ---- 16.1 定义模板 面向对象编程能处理类型在程序运行之前都未知情况,动态联编。而泛编程中,在编译时就能获知其类型,静态联编。...// 错误,U之前必须加上 class或 typename template T calc(const T&, const U&); 除了定义类型参数,还可以在模板中定义非类型参数...因为编译器需要在编译时实例化模板,此时非类型参数会被一个用户提供编译器推断出值所代替,所以这些值必须是常量表达式。 非类型参数可以是一个整型,对应模板实参必须是常量表达式。...第一个阶段是编译模板本身时。这个阶段,编译器可以检查语法错误,如忘记分号或者变量名拼错等。 第二个阶段是编译器遇到模板使用时。对于函数模板调用,会检查实参数目是否正确和参数类型是否匹配。...对于类模板,则只检查模板参数目是否正确。 第三个阶段是模板实例化时,只有这个阶段才能发现类型相关错误。依赖于编译器如何管理实例化,这类错误可能在链接时才报告。

    1.5K20

    【TypeScript 演化史 -- 11】泛参数默认类型 和 新 --strict 编译选项

    TypeScript 2.3 增加了对声明泛参数默认类型支持,允许为泛类型类型参数指定默认类型。...; } } 这种方法可以让编译器通过,但咱们还有更优雅做法:泛参数默认类型。...泛参数默认类型 从 TypeScript 2.3 开始,咱们可以为每个泛类型参数添加一个默认类型。...有了--strict编译选项,就可以选择最高级别的类型安全(了解随着更新版本编译器增加了增强类型检查特性可能会报新错误)。 新--strict编译器选项包含了一些建议配置类型检查选项。...--checkJS 选项下 .js 文件中错误 即便使用了--allowJs,TypeScript 编译器默认不会报 .js 文件中任何错误

    1.8K30

    C++ 学习笔记

    6.非类型模板参数实参可以是任何编译器表达式,不过如果在表达式中使用了 operator >,就必须将相应表达式放在括号里面,否则>会被作为模板参数列表末尾>,从而截断了参数列表。...),从而使其可以用于任意有效非类型模板参数类型。...520不是喜欢 } 8.4 SFINAE(替换失败不是错误) SFINAE:当函数调用备选方案中出现函数模板时,编译器根据函数参数确定(替换)函数模板参数类型及返回类型,最后评估替换后函数匹配程度...模板参数 T 类型可能被推断为引用类型,此时可能会引起意料之外错误。...14.3 c++实例化模型 1.两阶段查找:编译器在模板解析阶段会检测不依赖于模板参数非依懒名称,在模板实例化阶段再检查依懒名称。

    6.7K63

    【C++】模板进阶

    ---- ---- 一、非类型模板参数(用整型类型变量来作为模板参数,传参时只能传常量) 1.非类型模板参数规定 1....模板参数分为类型模板参数非类型模板参数类型模板参数一般是class或typename定义出来,而非类型模板参数一般是整型定义出来常量,这个常量作为类模板或函数模板一个参数,在类模板或函数模板中可将该参数当成常量来使用...非类型模板参数声明时类型必须只能是整型,其他例如自定义类型,字符串类型,浮点类型均不能作为非类型模板参数类型声明,只有整型才可以。 4....C++搞出来非类型模板参数array类,实际对标的就是C语言静态数组,array第二个模板参数就是非类型模板参数N,我们在定义静态数组时,除C语言外定义方式,还可以用array类来定义一个对象,...由于模板性质,在报模板错误时,错误信息会非常凌乱,不容易定位错误具体位置,但大家在遇到模板大量报错信息时,不要慌张,先去看报错第一条信息,解决第一条错误信息后,后面的许多错误可能也会被解决掉了

    1.1K20

    C++【模板进阶】

    ---- 前言 模板是搭建 STL 基本工具,同时也是泛编程思想代表,模板用好了可以提高程序灵活性,以便进行更高效迭代开发,模板除了最基本类型替换功能外,还有更多高阶操作:非类型模板参数、全特化...,如 size_t,此时称为 非类型模板参数 注:非类型模板参数必须为常量,即在编译阶段确定值 利用 非类型模板参数 定义一个大小可以自由调整 整型数组 类 template class...类型作为非类型模板参数,其他类型不在标准之内 非类型模板参数必须为常量(不可被修改),且需要在编译阶段确定结果 整型家族:char、short、bool、int、long、long long 等...1.3、实际例子:array 在 C++11 标准中,引入了一个新容器 array,它就使用了 非类型模板参数,为一个真正意义上数组,这个数组是用来对标传统数组 注意: 部分老编译器可能不支持使用此容器...,节省资源,更快迭代开发,C++标准模板库(STL)因此而产生 增强了代码灵活性 模板缺点 模板会导致代码膨胀问题,也会导致编译时间变长 出现模板编译错误时,错误信息非常凌乱,不易定位错误 总之

    17010

    【泛编程】模板全详解

    这个时候就引入了这个非类型模板参数! 2.什么是非类型模板参数? 注意看,我们普通定义 T 是类型,而 N 这里并不是类型,而是一个常量!...类型模板参数定义是虚拟类型,注重是你要传什么,而 非类型模板参数定义是常量。...非类型形参:就是用一个常量作为类 (函数) 模板一个参数,在类 (函数) 模板中可将该参数当成常量来使用。 既然有了这个非类型模板参数,我们尝试着来解决问题!...然后,函数名后跟一对尖括号,尖括号中指定需要特化内容。 最后,函数形参表必须要和模板函数基础参数类型完全相同,如果不同编译器可能会报一些奇怪错误。...出现模板编译错误时,错误信息非常凌乱,不易定位错误(一般错误错误列表中第一个信息) Ⅶ.

    67120

    C++模板总结

    比如 A m;用这种方法把模板形参设置为 int 是错误编译错误:error C2079: ‘a’ uses undefined class ‘A’),类模板形参不存在实参推演问题。...三、模板非类型形参: 1、非类型模板形参:模板非类型形参也就是内置类型形参,如 template class B{} ; 其中int a就是非类型模板形参。...4、调用非类型模板形参实参必须是一个常量表达式,即他必须能在编译时计算出结果。 5、注意:任何局部对象,局部变量,局部对象地址,局部变量地址都不是一个常量表达式,都不能用作非类型模板形参实参。...9、非类型形参一般不应用于函数模板中,比如有函数模板 template void h(T b){} ,若使用 h(2) 调用会出现无法为非类型形参 a 推演出参数错误,...3、 类模板类型形参默认值和函数默认参数一样,如果有多个类型形参则从第一个形参设定了默认值之后所有模板形参都要设定默认值,比如 templateclass A{} ;就是错误,因为 T1 给出了默认值

    1.3K20

    C++那些事之万物皆可auto

    C++那些事之万物皆可auto C++17引入了许多旨在提高代码表达性并减少模板代码冗余功能。其中一个显著增强是使用auto关键字声明非类型模板参数能力。...在C++17中使用auto非类型模板参数 在数据库场景中进行排序 考虑一个与数据库相关类Foo,你希望根据枚举表示特定顺序进行排序: enum class SortOrder { Ascending...,因为编译器无法推断模板参数'U'。...(const T&) { return K; } 这种方式更为简便,使得我们无需显式指定类型即可使用非类型模板参数。...结论 C++17引入auto关键字用于非类型模板参数声明极大地简化了模板代码。通过消除繁琐类型声明,我们能够更加直观地表达代码意图,提高代码可读性和可维护性。

    15810

    C++模板(关键字template,typename)介绍

    模板是一种对类型进行参数工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同函数; 类模板针对仅数据成员和成员函数类型不同类。...使用模板目的就是要让这程序实现与类型无关,比如一个swap模板函数,即可以实现int ,又可以实现double交换。模板可以应用于函数和类。下面分别介绍。...比如A m;用这种方法把模板形参设置为int是错误编译错误:error C2079: ‘a’ uses undefined class ‘A’),类模板形参不存在实参推演问题。...2.4、 调用非类型模板形参实参必须是一个常量表达式,即他必须能在编译时计算出结果。...2.9 、非类型形参一般不应用于函数模板中,比如有函数模板template void h(T b){},若使用h(2)调用会出现无法为非类型形参a推演出参数错误,对这种模板函数可以用显示模板实参来解决

    1.1K20

    C++17, 语言核心层变化更多细节

    , 在C++17中, auto 这种自动类型推导能力又进一步增强了,借助auto,函数模板和(类模板)构造函数模板参数可以根据其参数自动进行类型推导(细节介绍),非类型模板参数类型也可以从参数中自动推导出来....下面我就来介绍一下非类型模板参数自动类型推导....auto, 编译器便可以自动推导非类型模板参数(第1行代码中 N)类型了,你甚至可以像示例代码中那样(第7和第8行)偏特化该模板(示例代码中为int类型进行了偏特化).第13行代码模板会依据原始模板...一般类型修饰符也可以用在非类型模板参数上,所以很多时候,你不必非得使用模板偏特化来限制非类型模板参数类型. template struct S; 上述代码中, p...,而 TypeVariadicTemplate 模板(第7行至第11行)则仅会自动推导第一个非类型模板参数类型,其余非类型模板参数类型都与第一个非类型模板参数类型相同.

    74810
    领券