下面是发生在我身上的事情,我无法弄清楚是什么问题。我的同事和我为此纠缠不清。它是在一个跨平台的库中使用Windows上的跨平台工具包wxWidgets
#include <wx/wx.h>
class Graph {
public:
// ...
// main1.cpp:4:10: error: expected identifier before '(' token
double GetYValue(double x);
};
我们正在努力寻找任何奇怪的字形,而不是ASCII e
或其他东西,但没有发现任何此类问题。发生了什么事?!
答案 0 :(得分:9)
WinGDI.h ln 640:#define GetYValue(cmyk) ((BYTE)((cmyk)>> 8))
得爱windows.h
这就是为什么我建议在大多数情况下使用驼峰盒进行反复使用。
答案 1 :(得分: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
查看wxWidgets标头。可能有像这样的代码片段,或者你应该做这样的事情吗?
答案 2 :(得分:6)
我的第一个猜测是<wx/wx.h>
有一个名为GetYValue
的宏(可能是另一个名为GetXValue
),它应该采用某种组合的X / Y值并“解包“将它们放入各自的组成部分,按照以下顺序:
#define GetXValue(xy) ((xy)>>16)
#define GetYValue(xy) ((xy)&x0ff)
随着扩展,您的代码将类似于:
double ((xy)>>16)(double x);
...此时编译器有一个合适的东西 - 当然,它可能会比这更快地放弃解析,因为double x
似乎试图将两个标记作为参数传递给a只需要1的宏。
编辑:我看到我猜得相当接近,但猜错了这里涉及到什么样的“Y” - 其他人显然是GetCValue
,GetMValue
等,而不是GetXValue
。哦,好吧......