Бигнум арифметика. класс С++

Недавно я начал изучать классы и перегрузку операторов в C++ и написал следующий класс Bignum, чтобы попрактиковаться. Ссылка: http://pastebin.com/cQNwRChx. Это не финальная версия, например там нет обработки исключений и возможно она не такая эффективная, поэтому хочу уточнить некоторые вопросы:

  1. Этот код успешно скомпилирован в MSVS 2010, но GNU C++ 4.4.1 говорит, что 'fft' не был объявлен в этой области в строке 465.
  2. Я использую быстрое преобразование Фурье для умножения чисел, когда результат огромен. Из-за очень медленных стандартных комплексных чисел я написал свою собственную реализацию. На мой взгляд, эти комплексные числа должны быть скрыты, потому что это часть реализации Lint. Поэтому я объявляю его частным вложенным классом Lint и объявляю fft другом Lint. Почему это не работает в GNU?
  3. Отладчик MSVS показывает, что константа ONE не является статической константой. Он определен ниже, после определения Lint.
  4. Я бы хотел использовать в выражениях классы с int, unsigned int и т.д., и текущая версия работает нормально, но также я хочу иметь возможность писать что-то вроде этого: if (a) ..., где a — это Lint. Но если я определяю неявное преобразование в bool и пишу a+b, где a — это int, а b — Lint, возникает двусмысленность. Как я могу решить эту проблему?

УПД. Есть простой псевдокод без лишних функций и определений: http://pastebin.com/rauKQjtH.


person perlik    schedule 12.04.2013    source источник
comment
Это интересный код, но он совершенно не подходит для отзывов здесь. Пожалуйста, создайте минимальную, полную версию кода, в которой по-прежнему проявляется проблема, и удалите весь нерелевантный код. Вероятность того, что люди увидят его, возрастет.   -  person Konrad Rudolph    schedule 12.04.2013
comment
компилируется на g++ 4.6.3 без предупреждений...   -  person iBrAaAa    schedule 12.04.2013
comment
этот код компилируется нормально на gcc 4.7.1, также посмотрите stackoverflow.com/questions/7578682/   -  person neagoegab    schedule 12.04.2013
comment
В вопросе 4 используйте explicit operator bool() const, если C++11 разрешен, в противном случае гуглите Safe-Bool-Idiom. Кроме того, вам может пригодиться моя библиотека df.operators (опять же, если C++11 вариант, в противном случае проверьте Boost.Operators)   -  person Daniel Frey    schedule 13.04.2013