【tensorrt】——error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’

本文主要是介绍【tensorrt】——error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

tensorrt

给tensorrt写插件的时候,报错:

interpolate.cpp:63:93: error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’

因为还有父类的虚函数没有实现。

可以通过一个简单的类实现进行测试,所有的函数不需要实现,这样看有哪些虚函数。比如:

class InterpolatePlugin : public IPluginV2 
{
public:InterpolatePlugin(std::vector<int64_t> size, std::string mode, bool align_corners) {};InterpolatePlugin(const char *data, size_t length){};// create from serialized dataInterpolatePlugin(const std::string &data) {  };int getNbOutputs() const override {};Dims getOutputDimensions(int index, const Dims* inputs, int nbInputDims) override{    };int initialize() override{};void terminate() override{};size_t getWorkspaceSize(int maxBatchSize) const override{};int enqueue(int batchSize, const void* const* inputs, void** outputs, void* workspace, cudaStream_t stream) override{        };size_t getSerializationSize() const override{};void serialize(void* buffer) const override{};void configureWithFormat(const Dims* inputDims, int nbInputs, const Dims* outputDims, int nbOutputs, DataType type,PluginFormat format, int maxBatchSize) override{};bool supportsFormat(DataType type, PluginFormat format) const override{};const char* getPluginType() const override{};const char* getPluginVersion() const override{};void destroy() override{};IPluginV2* clone() const override{};void setPluginNamespace(const char* libNamespace) override{}const char* getPluginNamespace() const override{}private:// float mNegSlope;// int mBatchDim;// configured by userstd::vector<int64_t> size;std::string mode;bool align_corners;
};

上面是IPluginV2, 下面是IPluginV2DynamicExt类的最简单,包含了所有虚函数。


class InterpolatePlugin : public IPluginV2DynamicExt
{
public:InterpolatePlugin(std::vector<int64_t> size, std::string mode, bool align_corners) {};InterpolatePlugin(const char *data, size_t length){};// create from serialized dataInterpolatePlugin(const std::string &data) {  };// ~InterpolatePlugin() override = default;// IPluginV2 methodsconst char* getPluginType() const override{};const char* getPluginVersion() const override{};int getNbOutputs() const override{};int initialize() override{};void terminate() override{};size_t getSerializationSize() const override{};void serialize(void* buffer) const override{};void destroy() override{};void setPluginNamespace(const char* libNamespace) override{};const char* getPluginNamespace() const override{};// void setClipParam(bool clip){};// IPluginV2Ext methodsnvinfer1::DataType getOutputDataType(int index, const nvinfer1::DataType* inputType, int nbInputs) const override{};// IPluginV2DynamicExt methodsIPluginV2DynamicExt* clone() const override{return new InterpolatePlugin(size, mode, align_corners);};DimsExprs getOutputDimensions(int outputIndex, const DimsExprs* inputs, int nbInputs, IExprBuilder& exprBuilder) override{};bool supportsFormatCombination(int pos, const PluginTensorDesc* inOut, int nbInputs, int nbOutputs) override{};void configurePlugin(const DynamicPluginTensorDesc* in, int nbInputs, const DynamicPluginTensorDesc* out, int nbOutputs) override{};size_t getWorkspaceSize(const PluginTensorDesc* inputs, int nbInputs, const PluginTensorDesc* outputs, int nbOutputs) const override{};int enqueue(const PluginTensorDesc* inputDesc, const PluginTensorDesc* outputDesc, const void* const* inputs,void* const* outputs, void* workspace, cudaStream_t stream) override{};private:std::vector<int64_t> size;std::string mode;bool align_corners;
};

这篇关于【tensorrt】——error: invalid new-expression of abstract class type ‘torch2trt::InterpolatePlugin’的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056760

相关文章

Nginx错误拦截转发 error_page的问题解决

《Nginx错误拦截转发error_page的问题解决》Nginx通过配置错误页面和请求处理机制,可以在请求失败时展示自定义错误页面,提升用户体验,下面就来介绍一下Nginx错误拦截转发error_... 目录1. 准备自定义错误页面2. 配置 Nginx 错误页面基础配置示例:3. 关键配置说明4. 生效

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

Python包管理工具pip警告WARNING: Ignoring invalid distribution问题解决

《Python包管理工具pip警告WARNING:Ignoringinvaliddistribution问题解决》pip警告通常是由于包安装不完整、损坏或拼写错误引起的,:本文主要介绍Pyt... 目录前言原因分析解决方法方法 1:手动删除无效元数据(推荐)方法 2:自动清理所有无效包验证修复总结 前言w

Java抽象类Abstract Class示例代码详解

《Java抽象类AbstractClass示例代码详解》Java中的抽象类(AbstractClass)是面向对象编程中的重要概念,它通过abstract关键字声明,用于定义一组相关类的公共行为和属... 目录一、抽象类的定义1. 语法格式2. 核心特征二、抽象类的核心用途1. 定义公共接口2. 提供默认实

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Python中的魔术方法__new__详解

《Python中的魔术方法__new__详解》:本文主要介绍Python中的魔术方法__new__的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、核心意义与机制1.1 构造过程原理1.2 与 __init__ 对比二、核心功能解析2.1 核心能力2.2