成员函数声明的奇怪错误

时间:2010-08-23 20:26:22

标签: 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);
};

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

3 个答案:

答案 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” - 其他人显然是GetCValueGetMValue等,而不是GetXValue。哦,好吧......