2011-05-09 5 views
0

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

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

И файл algorithmfwd.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

+2

Ваша ошибка для «макс», код показывает «мин» ... – forsvarir

+1

Ваша ошибка, если для «макро», «шаблон» ваш код шоу. – jv42

+1

Фактически, ошибка заключается в расширении макроса. Это происходит до того, как шаблоны даже разобраны (шаг препроцессора). – MSalters

ответ

1

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

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

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

3

ошибка вполне определенно:

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

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

0

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

I am getting many errors while compiling

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

Смежные вопросы