【问题标题】:error: request for member (maybe you meant to use '->' ?) while using '->' already错误:请求成员(也许您打算使用 '->' ?)同时使用 '->' 已经
【发布时间】:2013-02-04 14:06:15
【问题描述】:

对于这个错误的含义有简单的解释吗?

错误:在 '* printerInfo' 中请求成员 'Attributes',它是 指针类型“PPRINTER_INFO_2 {aka _PRINTER_INFO_2A*}”(也许你 意味着使用'->'?)

PPRINTER_INFO_2* printerInfo = NULL;

    void ChangedPrinter()
    {
       ...
       DWORD attributesPrinterInfo;

       printerInfo = (PPRINTER_INFO_2*) malloc(bufferSize);

       attributesPrinterInfo = printerInfo->Attributes; // error

       free(printerInfo);
    }

我做错了什么???

【问题讨论】:

  • AttributesPrinterInfoprinterInfo->Atteibutes属于哪一种?在我看来,一个是指针,另一个是结构。
  • 两者是相同类型的DWORD。 attributesPrinterInfo 不是指针。

标签: c++ pointers syntax compiler-errors dynamic-allocation


【解决方案1】:

PRINTER_INFO_2结构定义为:

typedef struct _PRINTER_INFO_2 {
  // ...
} PRINTER_INFO_2, *PPRINTER_INFO_2;

所以PPRINTER_INFO_2 是指向PRINTER_INFO_2 的指针。当你这样做时

printerInfo = (PPRINTER_INFO_2*) malloc(bufferSize);

printerInfo 实际上变成了指向PRINTER_INFO_2 的指针。我不确定这是一个意图还是一个错误,但如果它的意图是PPRINTER_INFO_2*,那么正确的用法是:

(*printerInfo)->Attributes

【讨论】:

    【解决方案2】:

    对于 Cpp, 看到这个https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91138

    Suggesting -> 当它已经使用它时没有帮助。正确的解决方法是建议 (*pp)->member

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多