2013-02-14 54 views
0

我寫了以下內容,但由於某種原因調用InstructionVal(b)無效。 智能感知吐出:對無符號字符賦值無效C++

只有()被允許用於初始化成員NPPInstructionDef :: InstructionVal

這裏是有問題的代碼:

//Single Instruction Definition for Instruction Dictionary 
typedef struct NPPInstructionDef 
{ 
    const char* InstructionName; 
    const unsigned char* InstructionVal[]; 

    NPPInstructionDef(const char* a, const unsigned char* b[]): InstructionName(a), InstructionVal() 
    { 
    } 
}NPPInstruction; 

什麼想法?謝謝。

回答

1

首先,我假設你的初始化是InstructionVal( b),而不是你寫的InstructionVal()。 但即使如此,你寫的不應該編譯。

這是通常的問題,因爲C風格數組 已損壞,不應使用。你的定義:

unsigned char const* InstructionVal[]; 

定義未知長度的unsigned char*(因此,在一類 確定指標非法的)的陣列。除了()(初始值 )之外,沒有辦法在初始化列表中初始化 。

你想要的是:

std::vector <unsigned char*> InstructionVal; 

,並構造應該是:

NPPInstructionDef(std::string const& a, 
        std::vector <unsigned char> const& b); 

,或者更可能的:

template <typedef Iterator> 
NPPInstructionDef(std::string const& a, 
        Iterator begin, 
        Iterator end) 
    : InstructionName(a) 
    , InstructionDef(begin, end) 
{ 
} 

(這個假設,當然,那InstructionNamestd::string,而不是char const*。這將避免任何字符串的生命期的問題,例如,並允許容易比較等)