Visual C++错误C2665:3个重载都无法转换所有参数类型
Visual C++ error C2665: none of the 3 overloads could convert all the argument types
结构中的重载函数:
struct VARIABLE
{
VARIABLE() : ShortName(NULL), MemberAddr(0), Description(NULL), DefaultValue(NULL), ValueSize(0), MemberType(NULL) {}
template<typename U>
VARIABLE(LPCTSTR sName, U const & member, U const & default, LPCTSTR desc)
: ShortName(sName), Description(desc)
, MemberAddr((LPCBYTE)&member - (LPCBYTE)0), MemberType(new VTYPE<U>())
, SizeAddr(0), SizeType(NULL)
{
SetDefault(default);
}
template<typename U>
VARIABLE(LPCTSTR sName, U const & member, LPCTSTR desc)
: ShortName(sName), Description(desc)
, MemberAddr((LPCBYTE)&member - (LPCBYTE)0), MemberType(new VTYPE<U>())
, SizeAddr(0), SizeType(NULL)
{}
template<typename T, typename U>
VARIABLE(LPCTSTR sName, NWArray<U> const & member, T const & size, LPCTSTR desc)
: ShortName(sName), Description(desc)
, MemberAddr((LPCBYTE)&member - (LPCBYTE)0), MemberType(new VTYPE<NWArray<U> >())
, SizeAddr((LPCBYTE)&size - (LPCBYTE)0), SizeType(new VTYPE<T>())
{}
~VARIABLE() {
if (ValueSize && DefaultValue) {
delete DefaultValue; DefaultValue = NULL; ValueSize = 0;
}
if (MemberType) {
delete MemberType; MemberType = NULL;
}
}
template<typename U> void SetDefault(U default) { ValueSize = sizeof(U); DefaultValue = new U(default); }
template <typename U> const U& GetDefault() const { return *(U*)DefaultValue; }
LPCTSTR ShortName;
intptr_t MemberAddr;
TYPE *MemberType;
LPCTSTR Description;
LPVOID DefaultValue;
DWORD ValueSize;
DWORD SizeAddr;
TYPE *SizeType;
};
#define INITVARTYPE(T)
T() { ::Init(this->GetInfDefmap(), (LPVOID)this); }
#define BEGIN_INI_MAP_NOINIT(T)
LPCSTR GetTypeName() const { return #T; }
void *GetMember(const VARIABLE* memptr) const { return (void*)(((char*)this) + memptr->MemberAddr); }
const VARIABLE* GetInfDefmap() const { return InternalGetInfDefmap(); }
static VARIABLE* InternalGetInfDefmap() {
const T* pThis = 0; static VARIABLE map[] = {
#define BEGIN_INI_MAP(T)
INITVARTYPE(T)
BEGIN_INI_MAP_NOINIT(T)
#define END_INI_MAP()
VARIABLE() };
return map;}
template<typename T, typename U, typename V>
VARIABLE FADDCLASS(T member, U ptr, V desc)
{
VARIABLE(member, ptr, desc);
}
#define ADDCLASS(member)
FADDCLASS(#member, pThis->member, #member),
当它试图构建以下过程时,它给了我这个错误。
struct test
{
char * name;
BEGIN_INI_MAP(test)
ADDCLASS(name)
END_INI_MAP()
}
错误C2665:"VARIABLE::VARIABLE"3个重载都无法转换所有参数类型。我该如何解决此问题?这件事我已经想了好几个小时了。
VARIABLE::VARIABLE(...)
的唯一重载接受3个参数,即LPCTSTR
、泛型类型U
和另一个LPCTSTR
。那么FADDCLASS(...)
为什么要取3个泛型呢?用LPCTSTR
代替T
和V
。
相关文章:
- 无法转换类型 C++
- 包含可变参数包的第一个可转换类型的别名的结构
- 将 std::conditional 与不可转换类型(原始与指针)一起使用
- 链接方法时出现转换类型错误
- 如何避免隐式转换类型
- 在多重继承场景中动态强制转换类型
- 编译器不支持的转换类型
- 错误调用功能无法转换类型
- 我想看到一个在整个后缀表达式的上下文中查找转换类型 id 的示例
- 对于动态类型为强制转换类型的对象,dynamic_cast失败
- 无法在初始化中转换类型
- 如何让"auto"转换类型
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 如何从新运算符+(Template类)返回具有转换类型的对象
- 带有模板的基于枚举的工厂无法转换类型
- 使用SWIG类型映射通过字符串转换类型
- 对于可转换类型,设计比循环依赖项更好
- SWIG不能正确转换类型定义
- 将类型转换扩展到可转换类型的对/元组
- 想要将字符数组的部分转换/类型转换为值