-2
重載函數的結構:的Visual C++錯誤C2665:沒有3個重載可以轉換所有的參數類型
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重載中沒有一個可以轉換所有參數類型。 我該如何解決這個問題? 我已經對此感到困惑了幾個小時。
你知道模板函數'FADDCLASS'被聲明爲返回'VARIABLE',但沒有'return'語句,對吧?這不是錯誤消息中的唯一文字。請在問題中發佈* entire *錯誤信息,並在問題中提供支持描述,並確保您的FADDCLASS副本/粘貼是準確的,因爲現在顯然不存在。 – WhozCraig 2014-09-05 16:33:46
您是否正在構建一個Unicode版本?所有那些'LPCTSTR'參數將會期望指向寬字符串的指針,但'#member'會產生一個窄的字符串 - ''name'',而不是'L'name''或'_T(「name」)' – 2014-09-05 16:46:36