Странная ошибка для объявления функции-члена - PullRequest
3 голосов
/ 24 августа 2010

Ниже что-то случилось со мной, и я не мог понять, что не так.Мой коллега и я облажались вокруг этого.Это было в кроссплатформенной библиотеке с использованием кроссплатформенного инструментария wxWidgets в Windows

#include <wx/wx.h> 

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

Мы изо всех сил пытались найти какой-нибудь странный глиф, помещенный вместо ASCII e или чего-то еще, но не смоглинайти любую такую ​​проблему.Что происходит!?

Ответы [ 3 ]

9 голосов
/ 24 августа 2010

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

Должен любить windows.h

Вот почему я рекомендую ПРОТИВ использовать верблюжий футляр для большинства вещей.

7 голосов
/ 24 августа 2010

Я не использую 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.Возможно, есть фрагмент кода, подобный этому, или вы должны сделать что-то подобное?

6 голосов
/ 24 августа 2010

Моим первым предположением будет то, что <wx/wx.h> имеет макрос с именем GetYValue (и, возможно, другой с именем GetXValue), который должен принимать некое комбинированное значение X / Y и "разворачивать" их в отдельные компоненты. , в общем порядке:

#define GetXValue(xy) ((xy)>>16)
#define GetYValue(xy) ((xy)&x0ff)

С этим расширением ваш код будет выглядеть примерно так:

double ((xy)>>16)(double x);

... в этот момент компилятор начинает шипеть - за исключением, конечно, того, что он, вероятно, прекратил синтаксический анализ раньше, чем это, так как double x, кажется, пытается передать два токена в качестве параметров макросу, который только ожидает 1.

Редактировать: Я вижу, что угадал довольно близко, но неправильно угадал, что здесь за слово "Y" - другие, очевидно, будут GetCValue, GetMValue и т. Д. Вместо GetXValue. Ну да ладно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...