超载功能没有上下文类型信息
overloaded function with no contextual type information
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
void cb(int x)
{
std::cout <<"print inside integer callback : " << x << "n" ;
}
void cb(float x)
{
std::cout <<"print inside float callback :" << x << "n" ;
}
void cb(std::string& x)
{
std::cout <<"print inside string callback : " << x << "n" ;
}
int main()
{
void(*CallbackInt)(void*);
void(*CallbackFloat)(void*);
void(*CallbackString)(void*);
CallbackInt=(void *)cb;
CallbackInt(5);
CallbackFloat=(void *)cb;
CallbackFloat(6.3);
CallbackString=(void *)cb;
CallbackString("John");
return 0;
}
上面是我的代码,它具有三个函数,我想创建三个回调,这些回调将根据其参数调用过载函数。Callbackint用于调用以INT为参数的CB函数,并类似地休息两个。
但是,当使用它进行编译时,我的错误如下。
function_ptr.cpp: In function ‘int main()’:
function_ptr.cpp:29:21: error: overloaded function with no contextual type information
CallbackInt=(void *)cb;
^~
function_ptr.cpp:30:14: error: invalid conversion from ‘int’ to ‘void*’ [-fpermissive]
CallbackInt(5);
^
function_ptr.cpp:32:23: error: overloaded function with no contextual type information
CallbackFloat=(void *)cb;
^~
function_ptr.cpp:33:18: error: cannot convert ‘double’ to ‘void*’ in argument passing
CallbackFloat(6.3);
^
function_ptr.cpp:35:24: error: overloaded function with no contextual type information
CallbackString=(void *)cb;
^~
function_ptr.cpp:36:24: error: invalid conversion from ‘const void*’ to ‘void*’ [-fpermissive]
CallbackString("John");
1)编译器不知道,选择哪种cb
的超载。
2)即使确实知道,它也不会从void*
转换为void(*)(int)
,而没有任何明确的转换。
但是,如果您给出足够的信息,它可以推断出来:
void cb(int x)
{
std::cout <<"print inside integer callback : " << x << "n" ;
}
void cb(float x)
{
std::cout <<"print inside float callback :" << x << "n" ;
}
void cb(const std::string& x)
{
std::cout <<"print inside string callback : " << x << "n" ;
}
int main()
{
void(*CallbackInt)(int);
void(*CallbackFloat)(float);
void(*CallbackString)(const std::string&);
CallbackInt = cb;
CallbackInt(5);
CallbackFloat = cb;
CallbackFloat(6.3);
CallbackString = cb;
CallbackString("John");
return 0;
}
我知道这是一个旧帖子,但是我最近遇到了这个错误,我的问题是我没有声明我设置了函数结果的变量。不确定为什么这是一个错误,但希望这对某人有所帮助。
对于第一个错误,请使用静态铸造来指定所需的过载,例如此处
在其余的情况下,您不能施放一个int或浮标,以使*有意义地虚空。不知道您想在这里做什么。
CallbackInt
可能应采用int参数...
相关文章:
- Keil armcc 生成类型信息名称,即使使用 --no_rtti_data
- 错误:未定义对"静脉类型信息::电池访问"的引用
- 如何在编译过程中输出C 类型信息
- 如何在C 中检查确切的类型信息(具有CV-REF-POIRT特征)
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 为什么C++不使用集中存储类型信息以实现高效的 RTTI
- 给定DDS主题名称,可以在运行时确定主题类型信息
- 使用友元函数从多态类中检索类型信息
- 如何在函数模板中隐式推导数组中元素的类型信息
- 使用标准类型的动态类型信息实例化标识符
- 超载功能没有上下文类型信息
- 对"vtable for "命名空间继承的未定义引用 对"类型信息"的未定义引用
- 多映射插入键类型信息 std::make_pair vs std::p air 构造函数
- Visual Studio-使用PDB进行调试,但缺少类型信息
- 如何在不同的上下文(例如线程)中保留原始异常类型信息
- C++正在传输运行时条件类型信息
- C++虚拟表上的虚拟定义器和类的类型信息
- C++测试宏定义的类型信息值
- 编译器不可知的运行时类型信息
- C++类型信息