转换gcc-fpermission无效
invalid conversion gcc -fpermissive
我的想法是检查这个dll是否有我需要的版本,或者它是旧的还是新的?我正在尝试使用THUNK/蹦床功能。
这是我在另一个*.dll文件中的用法
int FilterVersion(CBaseFilter* pFilter)
{
//this is line 178
void* ProgVersion = (CBaseFilter::AbstractProgVersion)(void *)&CBaseFilter::FilterVersionStatic;
return (*(CBaseFilter::AbstractProgVersion)ProgVersion)(*pFilter);
}
这是我申报蹦床的班级的申报单。
class PROG_CORE_API CBaseFilter
{
friend class CProgEngineInternal;
// Trampoline Design pattern
// this FilterVersion function will be used on a global function exported from a
// cpp file exporting the dlls functions (therfore must be: static = global).
// it will use an arbitrary BaseFilter object - so Pure abstract function will
// make it possible to use polimorphism to all types of derived classes objects.
public:
typedef int (*AbstractProgVersion)(CBaseFilter&);
virtual int FilterVersionAbs() =0 ;
// a single spot (static) where all derived implemented filters versions tested.
// developer can specify version numbers to prohibit from running
// returning 0 should block the filter from loading.
static int FilterVersionStatic(CBaseFilter& FilterObj)
{
// version is 4 bytes
return FilterObj.FilterVersionAbs();
}
mutable int m_Version;
private:.....
我得到的警告是:
GCC Build Error in - AddBorders_F.cpp:178:76: error: invalid conversion from ‘CBaseFilter::AbstractProgVersion {aka int (*)(CBaseFilter&)}’ to ‘void*’ [-fpermissive]
GCC Build Error in - AddBorders_F.o] Error 1
GCC Build Error in - make: *** [AddBorders] Error 2
就我的搜索而言,我知道我错过了一个选角,但我不明白为什么?
我不确定你在这里想做什么,但这条线在很多方面都被打破了。(不,它与int *
的任何强制转换无关。int *
从哪里来?代码中没有int *
。)
复杂转换序列中的最后一个转换是CBaseFilter::AbstractProgVersion
类型,这是一种函数指针类型。但随后您尝试用它初始化void *
变量。函数指针类型不能隐式转换为void *
。这是你的错误。
如果你想用显式强制转换,你可以做
void* ProgVersion = (void *) &CBaseFilter::FilterVersionStatic;
额外转换为CBaseFilter::AbstractProgVersion
有什么意义?
但在任何情况下,void *
都是一种数据指针类型,不应与函数指针类型混合使用。该语言不支持数据指针和函数指针之间的转换。整个方法被彻底破坏了。
事实上,你到底为什么要做这些转换?为什么不只是
int FilterVersion(CBaseFilter* pFilter)
{
return CBaseFilter::FilterVersionStatic(*pFilter);
}
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 警告:逗号的右侧操作数对 GCC 4.4.7 无效
- C 11螺纹 - 非静态成员功能的使用无效 - 工作GCC 5.1.0损坏的GCC 7.3.1
- gcc添加符号时出现无效版本(max)错误:值错误
- 忽略无效的转换错误,GCC
- 非常量引用类型的无效初始化中出错.在Linux操作系统中使用c++代码.GCC编译器
- 转换gcc-fpermission无效
- 字符串对的C++向量作为函数参数的默认规范在 gcc-4.1.2 上无效
- 你好世界在 GCC 5.3.0 上失败 /bin/ld:无效选项 -- 'p'
- 在 clang 中显式指定的参数无效,但在 gcc 中成功编译 — 谁错了?
- gcc中类型的非常量引用的初始化无效,但Visual Studio中没有
- GCC错误:从double*到const double的转换无效
- 指针算术编译失败,gcc指出类型转换无效
- 为什么 gcc 的选项"-Wstrict-prototypes"对C++无效?
- GCC-寄存器的使用无效
- 用gcc编译的visual C++在VC++14中是有效的和无效的
- 带有GCC优化的C++代码会导致字符串上的core具有无效的free()
- GCC 问题 - 从 'void (*)(MyObject*, bool)' 到 'const void*' 的转换无效