0

我写了以下内容,但由于某种原因调用 InstructionVal(b) 无效。智能感知正在吐出:

初始化器成员 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;

有任何想法吗?谢谢。

4

1 回答 1

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*。这将避免字符串的任何生命周期问题,例如,并允许轻松比较等)

于 2013-02-14T19:24:11.440 回答