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

编译器错误C2158的最佳解决方法:make_public不支持本机模板类型

编译器错误C2158是指在使用本机模板类型时,make_public函数不支持的错误。本机模板类型是指在模板类或模板函数中使用本机类型(native type),而不是标准库或自定义的类或结构体。

解决这个错误的最佳方法是使用其他方式来实现相同的功能,而不是使用本机模板类型。以下是一些可能的解决方法:

  1. 使用标准库或自定义的类或结构体替代本机模板类型,以避免make_public函数不支持的问题。
  2. 检查代码中是否有其他地方使用了本机模板类型,并尝试将其替换为支持的类型。
  3. 如果必须使用本机模板类型,可以尝试使用其他编译器或更新编译器版本,以查看是否有对本机模板类型的支持。
  4. 可以尝试使用其他编译器选项或标志来解决该问题,例如调整编译器的优化级别或启用特定的编译器扩展。

需要注意的是,由于不提及具体的云计算品牌商,无法给出腾讯云相关产品和产品介绍链接地址。但是,腾讯云提供了一系列云计算服务,包括云服务器、云数据库、云存储等,可以根据具体需求选择适合的产品。

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

相关·内容

C++打怪升级(八)- 泛型编程初见

函数模板只是一个模板,一张图纸,不是一个具体函数 编译器在编译时根据实参类型顺序推导模板参数通用类型为某一特定类型,然后根据推倒类型生成具体特定类型函数(函数实例化) //函数模板 template...不同类型参数使用函数模板时,生成不同类型函数称为函数模板实例化; 分为隐式实例化和显式实例化; 隐式实例化 由编译器在编译阶段根据我们所传实参推导函数模板参数实际类型然后生成某一具体类型函数...(a, b); return 0; } 解决方法2:手动强制类型转换,确保编译器类型推导正确 int main() { int a = 1; double b = 3.14...或者说为什么我们需要指定类模板实例化类型而不是像函数模板实例化那样由编译器推导类型再实例化呢?...,而这又发生在链接阶段,导致链接错误解决方法 在函数定义文件中主动显式实例化 这是一个不太好(实用)方法 既然链接错误是因为,类模板成员函数只有声明显式实例化了,那么我们也在类模板成员函数定义文件内显式实例化即可

81120

C++【模板初阶】

_3Addii 而我们参数2为 double ,是一个浮点型数据,实际函数调用时,找是这个函数_3Addid 此时出现明显链接错误编译器索性直接在编译前就已经报错阻拦 解决方法: 将参数2强制类型转换为...int,或者将参数1强制类型转换为 double 都能解决问题 多参数模板也能解决问题,此时如果识别到两个不同参数,编译器就会根据实际情况生成函数 还有一种解决方法就是显式实例化 注意: 强制类型转换后生成临时变量进行传参...使用模板是在麻烦编译器帮我们办事,实际事也是办成功 当隐式实例化后函数已存在时,不会去生成模板函数,而是直接使用已存在函数 显式实例化后,编译器则会优先选择显式生成普通函数 隐式生成模板函数不存在类型隐式类型转换...,还有很多方法没实现,但大体逻辑都是如此 ️注意事项 类模板使用时需要注意一些问题: 模板类中函数在定义时,如果没有在类域中,就需要通过 类模板+ 类域访问 方式定义 类模板 不支持声明与定义分开在两个文件中实现...,因为会出现链接错误 ---- 总结 以上就是关于 C++ 模板初阶 全部内容了,模板是一个很实用工具,它可以提高我们编码效率,省去很多不必要麻烦,善用模板,快乐编程!

13010
  • 连接器工具错误lnk2019_2019年十大语文错误

    32位代码,或将32位库链接到64代码 13.将不同编译器选项用于不同源文件中函数内联 14.在其作用域外使用自动变量 15.调用内部函数或将参数类型传递到目标体系结构不支持内部函数 16.混合使用本机代码...“配置属性” ” > 常规” 页应显示C/c + + 编译器类型。 在命令行上,确保编译了包含定义源文件。...15.调用内部函数或将参数类型传递到目标体系结构不支持内部函数 例如,如果您使用 :::no-loc(AVX2)::: 内部函数,但未指定 / :::no-loc(ARCH)::: : :::no-loc...)::: 是本机类型。...声明必须包括与定义相同模板参数。 以下示例在用户定义运算符上生成 LNK2019,并演示如何修复此错误

    4.1K20

    讲解error: jump to label

    然而,有些编译器在默认情况下并不支持这样跳转,因此就会报出 "error: jump to label [-fpermissive]" 错误。...解决方法要解决该错误,我们可以使用以下两种方法:方法一:添加 -fpermissive 标志在编译代码时,我们可以通过添加 -fpermissive 编译标志来告诉编译器容忍这种类型跳转语句。...具体而言,-fpermissive 选项会禁用一些严格错误和警告,常见包括以下几种情况:隐式类型转换:允许不同类型之间隐式转换。...要注意是,使用 -fpermissive 选项可能会使一些本应该被视为错误代码通过编译。在大多数情况下,我们建议尽量避免使用该选项,而是修复代码中存在问题,以符合 C++ 标准和最佳实践。...总结"error: jump to label [-fpermissive]" 错误是在编译器遇到跳转语句时,表明编译器默认情况下不容忍该类型语句错误信息。

    1.1K10

    .NET 6+ 中源生成器诊断

    如果你 .NET 6+ 项目引用一个启用源生成代码包(例如日志记录解决方案),则特定于源生成分析器将在编译时运行。 本文列出了与源生成代码相关编译器诊断。...如果你遇到其中一个生成警告或错误,请按照为参考部分列出诊断 ID 提供具体指导进行操作。 还可以使用特定 SYSLIB1XXX 诊断 ID 值来取消警告。 有关详细信息,请参阅取消警告。...SYSLIB1021 多个消息模板项名称只是大小写不同 SYSLIB1022 不能使用格式错误格式字符串(例如不成对大括号) SYSLIB1023 不支持生成六个以上参数 SYSLIB1030...] 注释 SYSLIB1037 System.Text.Json 源生成器遇到具有仅初始化属性类型,这些属性不支持反序列化 SYSLIB1038 System.Text.Json 源生成器遇到使用 [...JsonInclude] 注释属性,该属性具有不可访问访问器 禁止显示警告 建议尽量使用解决方法之一。

    57120

    【C++】初识模板,拿来吧你

    显式实例化 5.模板参数匹配原则 三、类模板 1 类模板定义格式 2 类模板实例化 四、模板不支持分离编译(了解) 一、泛型编程 如何实现一个通用交换函数呢?...3.函数模板原理 函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数模具。...所以其实模板就是将本来应该我们做重复事情交给了编译器 。 在编译器编译阶段,对于模板函数使用,编译器需要根据传入实参类型来推演生成对应类型函数以供调用。...模板不支持分离编译。...解决方法: 法1.在Stack.cpp中显示实例化(这里偷个懒,截个图小看一下哈) 这种方法需要每次根据test.cpp定义类型而显示实例化类型

    26730

    成功解决“C7510 “某某”: 类型 从属名称使用必须以“typename”为前缀“

    问题描述 我们在使用C++编写程序,特别是使用template定义模板时经常会遇到编译器报错“类型 从属名称使用必须以“typename”为前缀”,如图: 遇到这种情况该如何解决?...可以很清晰明白,变量名是不可以当作类型,如果是这种情况那么编译器就一定要在运行程序第二步就直接报语法错误: 此时编译器在第二步编译时就会不知道如何处理这段代码,到底是把Container...注意,即便我们在定义模板参数时使用typename定义,也会报错: 解决办法 在搞清楚了编译器为何会报错之后,我们解决方法也非常简单: 正确做法是在container::const_iterator...前面加上typename,直接告诉编译器这就是一个类型,在后面等模板实例化之后再去找,不要直接报语法错误: typename Container::const_iterator it = v.begin...(); 但是auto也不是万能,如下面这种类模板声明时候就不能用auto反推: 我们在定义模板参数时使用typename定义,遇到这种报错解决方法也同上,加上typename

    9710

    Spring Native 中文文档

    2.2.1 系统要求 在安装 GraalVM native-image 编译器之前,需要一些准备工作 prerequisites , 然后需要本机安装一个原生镜像编译器。...本节探讨了可能遇到一些错误以及可能修复或解决方法。 在创建新之前,请确保检查与 Spring 相关 GraalVM 原生镜像已知问题以及Spring 本地化未解决问题。...Spring Native及其Spring AOT构建插件在特定应用程序类路径和配置上下文中执行AOT转换,以生成最佳本机配置。...下面的文档描述了尝试使Spring代码与本机映像更加兼容时要记住最佳实践。...如果可以在构建本机映像时执行检查,那么这是最佳选择,那么在运行时该状态检查不需要反射配置。要实现此优化: 在一种类型静态块/字段中执行状态检查。

    10.3K10

    C++初阶-模板进阶

    一、非模板类型参数 分类: 模板参数分类类型形参与非类型形参 概念: 类型形参: 出现在模板参数列表中,跟在class或者typename之类参数类型名称 非类型形参: 用一个常量作为类...非类型模板参数必须在编译期就能确认结果 二、模板特化 概念: 使用模板可以实现一些与类型无关代码,但对于一些特殊类型可能会得到一些错误结果 示例: template 函数名后跟一对尖括号,尖括号中指定需要特化类型 函数形参表: 必须要和模板函数基础参数类型完全相同,如果不同编译器可能会报一些奇怪错误 示例: template...报错解释: 解决方法 将声明和定义放到一个文件 “xxx.hpp” (h文件和cpp文件结合)里面或者xxx.h其实也是可以(推荐) 模板定义位置显式实例化(不实用) 四...,编译器会按需实例化) 出现模板编译错误时,错误信息非常凌乱,不易定位错误 不支持分离编译

    18830

    【C++】你想要——印刷模板

    函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数模具。所以其实模 板就是将本来应该我们做重复事情交给了编译器。  ...编译器通过类型推演,将函数模板进行实例化,对应T就会替换成具体类型模板实例化是用几个实例化几个,不是所有不同类型都提前模板实例化。...),就不会发生推演错误,你是什么类型就会推演成什么模板函数。...----  3.模板不支持分离编译 我们在实现数据结构时候,是不是会经常去分几个文件去实现不同模块功能?...但在链接时候,test.cpp中,却不能找到它地址,这是为什么??这就是模板和其他区别! 链接错误原因: .cpp中定义,不是实例化模板,他只是一个模板,没有任何实例化成任何类型

    40930

    C++【模板进阶】

    1.3、实际例子:array 在 C++11 标准中,引入了一个新容器 array,它就使用了 非类型模板参数,为一个真正意义上 泛型数组,这个数组是用来对标传统数组 注意: 部分老编译器可能不支持使用此容器...通常情况下,模板可以帮我们实现一些与类型无关代码,但在某些场景中,【泛型】无法满足调用方精准需求,此时会引发错误,比如使用 日期类对象指针 构建优先级队列后,若不编写对应仿函数,则比较结果会变为未定义...链接:合并段表,将符号表进行合并和重定位,生成可执行程序 当模板 声明 与 定义 分离时,因为是 【泛型】,所以编译器无法确定函数原型,即 无法生成函数,也就无法获得函数地址,在符号表中进行函数链接时...解决方法有两种: 在函数定义时进行模板特化,编译时生成地址以进行链接 模板声明和定义不要分离,直接写在同一个文件中 //定义 //解决方法一:模板特化(不推荐,如果类型多的话,需要特化很多份) template...,也会导致编译时间变长 出现模板编译错误时,错误信息非常凌乱,不易定位错误 总之,模板 是一把双刃剑,既有优点,也有缺点,只有把它用好了,才能使代码 更灵活、更优雅 ---- 总结 以上就是有关 C++

    17010

    【C++】从零开始认识泛型编程 — 模版

    性能:由于在编译时就已经知道具体数据类型,因此编译器可以生成针对该类型优化代码。 类型安全:泛型编程仍然可以进行类型检查,从而减少运行时错误。 泛型编程它允许开发者编写独立于数据类型算法和函数。...在编译器编译阶段,对于模板函数使用,编译器需要根据传入实参类型来推演生成对应类型函数以供调用。...比如:当用double类型使用函数模板时,编译器通过对实参类型推演,将A确定为double类型,然 后产生一份专门处理double类型代码: 就这样编译器生成一个个函数,将模版实例化,这是一种隐式实例化...隐式实例化:让编译器根据实参推演模板参数实际类型,也就是正常使用函数,让编译器去处理类型(可能会发生类型转换,存在隐患)。...模版不支持分离编译,如果声明与定义写到两个文件里,就会报错。

    20110

    【C++STL】模板进阶(非类型模板&&类模板打印&&特化&&分离编译)

    (2) C++20之后,可以支持double等其他内置类型,不支持自定义类型。 (3) 非类型模板参数一般都是用整形,它是不可改变常量。...原因: 类模板没有实例化时,编译器不去类里面检查细节东西,只是检查类外壳,无法确认此时是类型还是静态变量,加上typename就是提前告诉编译器 vector::const_iterator...三、模板特化 1、概念 通常情况下,使用模板可以实现一些与类型无关代码,但对于一些特殊类型可能会得到一些错误结果,需要特殊处理,比如:实现了一个专门用来进行小于比较函数模板 给定这样一个Date...(4) 函数形参表: 必须要和模板函数基础参数类型完全相同,如果不同编译器可能会报一些奇怪错误。...、模板会导致代码膨胀问题,也会导致编译时间变长 2、出现模板编译错误时,错误信息非常凌乱,不易定位错误

    12910

    探索类型系统底层 - 自己实现一个 TypeScript(硬核干货)

    A 部分:类型系统编译器概述 语法 vs 语义 语法和语义之间区别对于早期运行很重要。 语法 - Syntax 语法通常是指 JavaScript 本机代码。...类似于 Java 生态系统中编译器 - 将代码转换为字节码,然后将字节码转换为本机代码。 2. 语言编译器 语言编译器扮演着不同角色。...代码转换 许多类型系统包含原生 JavaScript 不支持代码(例如不支持类型注解) ,因此它们必须将不受支持 JavaScript 转换为受支持 JavaScript 代码。...使用预定义算法,引擎将计算给定变量或者函数类型。 TypeScript 在其 Binding 阶段(两次语义传递中第一次)中使用最佳公共类型算法。...它考虑每个候选类型并选择与所有其他候选类型兼容类型。上下文类型在这里起作用,也会做为最佳通用类型候选类型。在这里 TypeScript 规范中有更多帮助。

    1.2K40

    【C++修炼之路】14.模板进阶

    3.3 类模板特化 3.3.1 全特化 3.3.2 偏特化 四.模板分离编译 4.1 什么是分离编译 4.2 模板分离编译 4.3 解决方法 五.模板总结 模板进阶 一....不支持插入,但有运算符重载:operator[],因此就可以直接通过下标进行访问。...三.模板特化 3.1 概念 通常情况下,使用模板可以实现一些与类型无关代码,但对于一些特殊类型可能会得到一些错误结果,需要特殊处理,比如:实现了一个专门用来进行小于比较函数模板。...,如果不同编译器可能会报一些奇怪错误。...只要是指针类型,就会优先调用此特化类。当然,除了指针还有引用,引用和指针如出一辙。 特化本质体现编译器匹配原则:有现成用现成,没有现成用半成品,没有半成品再新造一个。

    26100

    函数模板 ## 函数模板

    编译器使⽤模板为特定类型⽣成函数定义时,得到模板实例(instantiation)。...只考虑特征标,⽽不考虑返回类型编译器必须确定哪个可⾏函数是最佳。它查看为使函数调⽤参数与可⾏候选函数参数匹配所需要进⾏转换。通常,从最 佳到最差顺序如下所述。...,则编译器将⽆法完成重载解析过程;如果没有最佳可⾏函数,则编译器将⽣成⼀条错误消息, 该消息可能会使⽤诸如“ambiguous(⼆义性)”这样词语。...- 如果有多个 同样合适模板函数或模板函数,但没有⼀个函数⽐其他函数更具体,则函数调⽤将是不确定,因此是错误;自己选择 在有些情况下,可通过编写合适函数调⽤,引导编译器做出您希望选择。...```c++ 20 15.5 -30 15 ``` - lesser(m, n)中指出,编译器应选择模板函数,⽽不是⾮模板 函数;编译器注意到实参类型为int,因此使⽤int

    2.2K10

    如何编写一个通用函数?

    (重点) 函数模板类似于一个模具,它本身并不是函数,是编译器用使用方式产生特定具体类型函数模具。...函数模板原理是通过将类型参数化,使函数能够在编译时根据实际参数类型推断生成具体函数实例。编译器会根据调用函数时参数类型,实例化出适合该类型函数版本。...比如: 当用double类型使用函数模板时,编译器通过对实参类型推演,将T确定为double类型,然后产生一份专门处理double类型代码.当用int类型使用函数模板时,编译器通过对实参类型推演...,将T确定为int类型,然后产生一份专门处理int类型代码.如上图所示. (3)模板参数显示实例化 上面我们实现交换函数,模板根据传参时不同参数,自动推演出函数参数实际类型.我们称这类通过编译器进行自动推导实例化模板参数称为模板参数隐式实例化...错误示例: template T add(const T& a, const int& b)//直接修改参数,进行固定 { return a + b; } (4)模板匹配 对于函数名相同模板函数和模板函数同时存在时

    18510

    【C++】初识模板

    接下来我们谈一谈它原理。 函数模板原理 函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数模具。所以其实模板就是将本来应该我们做重复事情交给了编译器。...(比如我们传入类型为int,编译器就会自动推导T类型为int,从而实现一份int类型代码),如下: 编译器在编译期间根据实参类型自动推演形参T类型 函数模板实例化 隐式实例化 所谓隐式实例化,...就是让编译器根据实参类型,来推演模板参数类型。...或者直接在类中定义(类中成员函数会被当做内联函数处理,提高效率) 不过有一点需要注意,就是模板不支持声明与定义分离在不同文件,会出现链接错误!...(如上:Stack只是类名,Stack才是类型模板不支持声明与定义分离在不同文件,会出现链接错误

    54230
    领券