ошибка компиляции в макросе - PullRequest
1 голос
/ 09 мая 2011

Я скачал программное обеспечение jsvm и получаю много ошибок при компиляции. Мало кто из них выглядит следующим образом.

/usr/include/c++/4.3/bits/algorithmfwd.h:248:41: error: macro "max" passed 3 arguments, but takes just 2

А файл алгоритма fwd.h выглядит следующим образом

 template<typename _Tp>
const _Tp&
min(const _Tp&, const _Tp&);
template<typename _Tp, typename _Compare>
const _Tp&
min(const _Tp&, const _Tp&, _Compare);

// min_element

Ответы [ 4 ]

3 голосов
/ 09 мая 2011

Ошибка довольно явная:

/ usr / include / c ++ / 4.3 / bits /gorithfwd.h: 248: 41: ошибка: макрос "max" передал 3 аргумента, но принимает только2

Перед включением этого конкретного заголовка вы определили макрос max, который принимает 3 аргумента.Макросы злые в том смысле, что они применяются везде, где появляется идентификатор.Проверьте, где в коде вы определяете этот макрос, и удалите его или, по крайней мере, измените его на верхний регистр (общее соглашение для макросов), чтобы он не раскрывался во всех других заголовках.

2 голосов
/ 09 мая 2011

Где-то вы определили макрос max, что недопустимо, если вы включаете какие-либо заголовки из стандартной библиотеки (которая имеет набор перегруженных функций с именем max).Вы должны будете узнать, где определен этот макрос, и избавиться от него.На ум приходят две непосредственные возможности:

  • Вы определили его как макрос в одном из ваших заголовков.Избавиться от этого.
  • Microsoft определяет (или определил - я не проверял VC10) как `min` и` max` как макросы в одном из своих заголовков.Добавьте /DNOMINMAX к вашим параметрам компилятора, чтобы подавить это.
  • Некоторая другая библиотека, которую вы не можете контролировать, определила ее.Оберните заголовки этой библиотеки в частные заголовки, которые включают заголовок библиотеки, затем выполните:
        #undef min
        #undef max
    
    Используйте эти оболочки вместо заданных вами заголовков библиотеки (и нажмите на поставщика библиотеки, чтобы исправить это).
0 голосов
/ 09 мая 2011

Вы не показываете максимальный макрос. В любом случае кажется, что вы пытаетесь использовать макрос с еще одним параметром, чем он ожидает.

Я получаю много ошибок при компиляции

Попробуйте исправить свои ошибки по порядку, потому что одна ошибка может повлиять на следующую.

0 голосов
/ 09 мая 2011

Похоже, что помимо функций в algorithmfwd.h есть макрос в стиле препроцессора, также называемый max. Попытайтесь найти того, кто определяет это, и не включайте заголовочные файлы, или используйте #undef max, если все остальное не удалось.

...