没有上下文类型信息的重载函数
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");
对于第一个错误,使用静态转换来指定你想要的重载,比如here
对于其余部分,您不能将 int 或 float 有意义地转换为 void*。不确定你想在这里做什么。
CallbackInt
可能应该采用 int 参数...
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;
}
我知道这是一个旧的 post,但我最近遇到了这个错误,我的问题是我没有声明我将函数结果设置为的变量。不知道为什么这个错误是它针对该问题给出的错误,但希望这对某人有所帮助。
#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");
对于第一个错误,使用静态转换来指定你想要的重载,比如here
对于其余部分,您不能将 int 或 float 有意义地转换为 void*。不确定你想在这里做什么。
CallbackInt
可能应该采用 int 参数...
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;
}
我知道这是一个旧的 post,但我最近遇到了这个错误,我的问题是我没有声明我将函数结果设置为的变量。不知道为什么这个错误是它针对该问题给出的错误,但希望这对某人有所帮助。