成员函数声明的奇怪错误

Joh*_*itb 3 c++ windows visual-c++

以下是发生在我身上的事情,我无法弄清楚什么是错的.我的同事和我为此纠缠不清.它是在Windows上使用跨平台工具包wxWidgets的跨平台库中

#include <wx/wx.h> 

class Graph {
public:
  // ...
  // main1.cpp:4:10: error: expected identifier before '(' token
  double GetYValue(double x);
};
Run Code Online (Sandbox Code Playgroud)

我们正在努力寻找任何奇怪的字形,而不是ASCII e或其他东西,但没有找到任何这样的问题.发生了什么事!?

Edw*_*nge 9

640:WinGDI.h #define GetYValue(cmyk) ((BYTE)((cmyk)>> 8))

得爱windows.h

这就是为什么我建议在大多数情况下使用驼峰盒AGAINST.


Ole*_*leg 7

我自己不使用wxWidgets,但在http://gambit.sourcearchive.com/documentation/0.2006.01.20/plotctrl_8cpp-source.html我发现奇怪的代码片段

#ifdef GetYValue   // Visual Studio 7 defines this
    #undef GetYValue
#endif
Run Code Online (Sandbox Code Playgroud)

查看wxWidgets标头.可能有像这样的代码片段,或者你应该做这样的事情?


Jer*_*fin 6

我的第一个猜测就是<wx/wx.h>有一个名为GetYValue(可能是另一个名字GetXValue)的宏,它应该采用某种组合的X/Y值并将它们"解包"到它们各自的组件中,顺序如下:

#define GetXValue(xy) ((xy)>>16)
#define GetYValue(xy) ((xy)&x0ff)
Run Code Online (Sandbox Code Playgroud)

随着扩展,您的代码将看起来像:

double ((xy)>>16)(double x);
Run Code Online (Sandbox Code Playgroud)

...此时编译器有一个合适的东西 - 当然,它可能会比这更快地放弃解析,因为它double x似乎试图将两个标记作为参数传递给只需要1的宏.

编辑:我看到我的猜测相当接近,但猜错了关于这里参与什么样的"Y"的-别人会显然是GetCValue,GetMValue等,来代替GetXValue.那好吧...