-2
_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    cmd.u[0] = CMD_SG_SYNCHED;
    cmd.u[1] = uThisStation;
    cmd.u[2] = iMode;
    DSPCmdOut(&cmd);
    return 0;
}

_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    if(S->uCMD > (MAX_CMD-1))
        return -1;
    S->cmd[S->uCMD] = *cmd;
    S->uCMD++;

    sprintf (cLogLine, "%u,%u,%u: cmd data", cmd.u[0],cmd.u[1],cmd.u[2]);                        
    WriteLine  (uhGDSLogFile, cLogLine, strlen(cLogLine));

    return 0;
}

编译时出现此错误:

Left operand of . has incompatible type 'pointer to COMMAND_DESCRIPTOR'.
4

1 回答 1

0

因为您要传递一个指向 a 的指针COMMAND_DESCRIPTOR(我想这是一个结构)以便为结构的字段分配值,所以您需要取消引用它。
所以,cmd->u[0]语法只是一个(*cmd).u[0]. ->只是语法糖。

改成等等cmd.u[0] = CMD_SG_SYNCHED;。 这是一个很好的话题:C++ 中的点 (.) 运算符和 -> 有什么区别?cmd->u[0] = CMD_SG_SYNCHED;

您的完整代码应如下所示:

_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    cmd->u[0] = CMD_SG_SYNCHED;
    cmd->u[1] = uThisStation;
    cmd->u[2] = iMode;
    DSPCmdOut(&cmd);
    return 0;
}

_export int DSPCmdOut(COMMAND_DESCRIPTOR *cmd)
{
    if(S->uCMD > (MAX_CMD-1))
        return -1;
    S->cmd[S->uCMD] = *cmd;
    S->uCMD++;

    sprintf (cLogLine, "%u,%u,%u: cmd data", cmd->u[0],cmd->u[1],cmd->u[2]);                        
    WriteLine  (uhGDSLogFile, cLogLine, strlen(cLogLine));

    return 0;
}
于 2014-06-10T09:50:58.820 回答