未解析的重载函数类型
unresolved overloaded function type
我试图写一个模板化的类,它持有一个引用到它的模板参数类型的对象,和一个指针指向一个void返回没有arg成员函数的类。然而,当我编译时,我得到一个关于'<unresolved function type>'
的错误。
template<class T>
class memberAction
{
public:
memberAction(void (T::*func)() , T& object);
private:
void (T::*m_func)();
T& m_object;
};
template<class T>
memberAction<T>::memberAction(void (T::*func)() , T& object)
{
m_func = func;
m_object = object;
}
class File
{
public:
File();
void TELUNUS_Open();
//memberAction<File>& getOpenAction();
private:
memberAction<File> m_OpenAction;
};
File::File():
m_OpenAction(TELUNUS_Open,*this)//Line with error on it
{
}
void File::Open()
{
//
}
使用g++ 4.7.2编译,我得到以下错误消息:
StackOverloadErrorExample.cpp|31|error: no matching function for call to 'memberAction<File>::memberAction(<unresolved overloaded function type>, File&)'|
似乎其他有类似编译错误的人混淆了指向全局函数的指针和指向成员函数的指针,但我特别声明构造函数作为指向其模板形参的成员函数的指针,并将正确类型的成员函数传递给它。
那么我如何解决这个编译器错误?
我认为您需要传递&File::TELUNUS_Open
-或&File::Open
,无论您实际调用它的名称-以获得成员函数指针。Open
具有函数类型void (File::)()
,而&File::Open
具有您真正想要的类型,函数指针类型void (File::*)()
。除此之外,您还会遇到m_object
引用成员的问题。赋值操作符将尝试赋值给未初始化的引用:
template<class T>
memberAction<T>::memberAction(void (T::*func)() , T& object)
{
m_func = func;
m_object = object;
}
你应该使用构造函数初始化列表:
template<class T>
memberAction<T>::memberAction(void (T::*func)() , T& object)
: m_func(func),
m_object(object) {}
我相信:
template< class T >
class memberAction
{
public:
memberAction( void (T::*)(), T& );
private:
void (T::*m_func)();
T& m_object;
};
template< class T >
memberAction< T >::memberAction( void (T::*func)(), T& object )
: m_func( func ), m_object( object )
{
}
class File
{
public:
File();
void TELUNUS_Open()
{
return;
}
//memberAction<File>& getOpenAction();
private:
memberAction< File > m_OpenAction;
};
File::File()
: m_OpenAction( &File::TELUNUS_Open, *this ) //Line with error on it
{
}
相关文章:
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 来自 DLL 的函数调用 [表观调用的括号前面的表达式必须具有(指向-)函数类型]
- 是否有任何建议来统一函数类型限定符并简化可恶的函数类型?
- 关于 C++ 中的函数类型定义
- 用于检测函数类型是否为否的特征
- 函数类型参数的模板参数推导
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- C++无效的函数类型转换
- STL 函数和函数类型与函数指针类型
- 如何将result_of与函数类型定义一起使用
- 将模板(没有规范)传递给 std::thread() 会出现错误:<未解析的重载函数类型>匹配错误
- C++ 编译错误:gnu_printf是无法识别的格式函数类型
- 专门用于"direct"函数类型(与函数指针类型相对)
- 将函数类型作为模板参数传递不会编译
- 通过参数传递 lambda(无函数类型模板)
- 如何在模板参数中分离函数类型返回类型和参数
- 为什么比较函数类型需要指定为模板参数?
- 带有限定符的函数类型定义用例
- 如何声明对函数类型的常量引用
- 非类型模板参数允许各种函数类型?