2014-12-05 25 views
0

va_list的錯誤一般形實轉換代碼失敗,這是我的課:C++:對方法

class ControlBoard : public ILCD 
{ 
    virtual void print(const GFX_STRING &string, ...); 

    // ... 

這是我的接口:

class ILCD 
{ 
    virtual void print(const GFX_STRING &string, ...) = 0; 

    // ... 

這是我的方法:

void ControlBoard::print(const GFX_STRING &string, ...) 
{ 
    va_list args; 
    va_start(args, string); 
    // ... 
    va_end(args);  
} 

這是編譯錯誤:

error: generic thunk code fails for method 'virtual void ControlBoard::print(const GFX_STRING&, ...)' which uses '...'

如果方法「print()」不在我的ILCD接口中,編譯就沒有問題。但我需要添加它,所以我不明白爲什麼會出現此錯誤?

非常感謝!

+0

變化'&string'爲'* string' – 2014-12-05 21:08:20

+0

@ bruno.karklis:沒有影響! – anthony 2014-12-05 21:12:15

+1

儘管使用引用類型作爲最後命名的參數確實無效,但這裏的問題完全不同。這僅僅是編譯器代碼生成的某些部分沒有完全針對特定平臺實現的例子。快速搜索該錯誤消息會提供解釋。編譯器品牌(可能是GCC),版本和平臺將成爲幫助您獲得可用解決方法的相關信息。 – hvd 2014-12-05 22:50:15

回答

-3

一個簡單的C代碼的va_list

int WriteLog (const char *pszBuffer, ...) 
{ 
    FILE *fp; 
    int iRet = FAIL; 
    va_list vaListArguments = NULL; 

    fp = _tfopen(LOGPATH, "a"); 

    if(NULL == fp) 
    { 
     return FAIL; 
    } 

    if(NULL != pszBuffer) 
    { 
     va_start(vaListArguments, pszBuffer); 

     if(NULL != vaListArguments) 
     { 
      iRet = _vftprintf(fp, pszBuffer, vaListArguments); 

      if(0 <= iRet) 
      { 
       _ftprintf(fp, " \n"); 
       fflush(fp);     
       iRet = SUCCESS; 
      } 
     } 
     va_end(vaListArguments); 
     fclose(fp); 
    } 

    return iRet; 
} 
+0

是的,但爲什麼我的方法不能構建? – anthony 2014-12-05 21:15:35

+0

爲什麼'&string'在'void ControlBoard :: print(const GFX_STRING&string,...)'而不是'* string'? – 2014-12-05 21:20:02

+0

我試着用*字符串,並且我有相同的編譯錯誤! – anthony 2014-12-05 21:21:55