интеграция наддува с числовыми рецептами 3 кода

я получаю кучу ошибок, когда использую библиотеку nr3.h и boost.

Я использую Ubuntu 10.04 с libboost1.40 и кодом с http://www.nr.com/ (3-е издание )

попробуйте.cc:

#include "nr3.h"
#include <boost/algorithm/string/predicate.hpp>

int main(void) {
  return 0;
}

я компилирую код "g++ try.cc" и получаю ошибки. если я закомментирую либо строку nr3.h, либо строку ‹ boost ... >, код компилируется нормально.

вот ошибки:

In file included from /usr/include/boost/assert.hpp:36,
                 from /usr/include/boost/range/iterator_range.hpp:31,
                 from /usr/include/boost/range/as_literal.hpp:22,
                 from /usr/include/boost/algorithm/string/predicate.hpp:19,
                 from boostnrexample.cc:2:
/usr/include/assert.h: In function ‘void __assert_fail(const char*, const char*, unsigned int, const char*)’:
/usr/include/assert.h:73: error: expected primary-expression before ‘,’ token
/usr/include/assert.h: At global scope:
/usr/include/assert.h:73: error: declaration does not declare anything
/usr/include/assert.h: In function ‘void __assert_perror_fail(int, const char*, unsigned int, const char*)’:
/usr/include/assert.h:79: error: expected primary-expression before ‘,’ token
/usr/include/assert.h: At global scope:
/usr/include/assert.h:79: error: declaration does not declare anything
/usr/include/assert.h: In function ‘void __assert(const char*, const char*, int)’:
/usr/include/assert.h:85: error: expected primary-expression before ‘,’ token
/usr/include/assert.h: At global scope:
/usr/include/assert.h:85: error: declaration does not declare anything
In file included from /usr/include/c++/4.4/x86_64-linux-gnu/bits/messages_members.h:37,
                 from /usr/include/c++/4.4/bits/locale_facets_nonio.h:1905,
                 from /usr/include/c++/4.4/locale:43,
                 from /usr/include/boost/algorithm/string/compare.hpp:15,
                 from /usr/include/boost/algorithm/string/predicate.hpp:22,
                 from boostnrexample.cc:2:
/usr/include/libintl.h: In function ‘char* gettext(const char*)’:
/usr/include/libintl.h:41: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:41: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* dgettext(const char*, const char*)’:
/usr/include/libintl.h:46: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:46: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* __dgettext(const char*, const char*)’:
/usr/include/libintl.h:48: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:48: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* dcgettext(const char*, const char*, int)’:
/usr/include/libintl.h:54: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:54: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* __dcgettext(const char*, const char*, int)’:
/usr/include/libintl.h:57: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:57: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* ngettext(const char*, const char*, long unsigned int)’:
/usr/include/libintl.h:64: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:64: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* dngettext(const char*, const char*, const char*, long unsigned int)’:
/usr/include/libintl.h:70: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:70: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* dcngettext(const char*, const char*, const char*, long unsigned int, int)’:
/usr/include/libintl.h:77: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: At global scope:
/usr/include/libintl.h:77: error: declaration does not declare anything
/usr/include/libintl.h: In function ‘char* textdomain(const char*)’:
/usr/include/libintl.h:83: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: In function ‘char* bindtextdomain(const char*, const char*)’:
/usr/include/libintl.h:88: error: expected primary-expression before ‘,’ token
/usr/include/libintl.h: In function ‘char* bind_textdomain_codeset(const char*, const char*)’:
/usr/include/libintl.h:93: error: expected primary-expression before ‘,’ token

Обновление: я также разместил его на форуме nr.com (http://www.nr.com/forum/showthread.php?t=2148). и получил ответ, что проблема в том, что nr3.h создал макрос определения для throw(). я все еще не уверен, что может быть надежным решением.


person kirill_igum    schedule 03.10.2011    source источник
comment
Похоже на противоречивое определение макроса. Попробуйте включить nh3.h после всех заголовков boost и system.   -  person Jan Hudec    schedule 03.10.2011
comment
хм, это сработало :-) я заменил две строки включения. однако это не кажется надежным решением. в некоторых случаях boost может быть включен после nr3.h   -  person kirill_igum    schedule 03.10.2011
comment
Единственное надежное решение — заставить NR восходящего потока изменить свой код, чтобы перестать определять ключевые слова C++ как макросы и вместо этого начать использовать правильные библиотечные префиксы. Это может быть проблема обратной совместимости, хотя в этом случае действительно нет хорошего решения.   -  person Jan Hudec    schedule 04.10.2011
comment
Также я бы рекомендовал не использовать код NR прямо из книги для всего, что связано с производством.   -  person Alexandre C.    schedule 18.10.2011


Ответы (1)


Быстрое исправление состоит в том, чтобы зайти в nr3.h и изменить макрос, злоупотребляющий ключевым словом C++, "throw" на безобидное ключевое слово C++, такое как "toss".

person Audrius    schedule 29.01.2013