2009-06-04 3 views
0

У меня проблема относительно максимального и SQRTC++ математические функции проблемы (под Linux)

Если я включаю math.h это coudn't найти SQRT.

Итак, я рассматриваю файл заголовка cmath, и внутри него входит math.h, но когда я пытаюсь открыть math.h, он говорит, что файл не найден. Так что в Linux отсутствует моя математика.

+0

В Linux, вы почти всегда найти его на /usr/include/math.h. Вы уверены, что его там нет? Он установлен как часть пакетов glibc или glibc-заголовков на многих дистрибутивах. – jmanning2k

ответ

5

Извините, что нашел ответ.

мне просто нужно написать так:

зЬй :: макс зЬй :: SQRT

Но почему же он работает без «СТД ::» под ОС Windows?

+2

Это зависит от вашего компилятора. Некоторые неправильно размещают функции в стандартной библиотеке C в пространстве имен std. –

+3

Я думаю, что заголовочные файлы windows.h определяют min и max как макросы. Их можно отключить, указав NOMINMAX перед включением указанного файла. –

4

NB: в C++ вы должны #include < CMATH> не #include < math.h>

NB: также с указанием имен является хорошей практикой

+0

Я думаю, что лучше сказать, почему кому-то нужно сделать что-то, а не просто командовать им – user3085931

1

Ваша система, вероятно, имеет заголовки C в одном месте в файловой системе, а заголовки C++ - в другом. Вы знакомы с фактическим списком каталогов, ищущих заголовки системы? (Фактически, для реализации не требуется иметь файлы системных заголовков, хотя все те, с которыми я знаком, имеют. Стандарт C++ имеет требования к тому, что должно делать заявление #include <cmath>, но не о том, как это должно быть сделано.)

В ответе вы говорите об изменениях между C++ в Linux и Windows. Это не специфичные для ОС, а скорее специфичные для реализации. Вероятно, вы используете Visual C++ в Windows и что-то еще в Linux (хотя бы потому, что VC++ работает только в Windows). Они могут работать по-разному в конфигурациях по умолчанию.

Фактически, #include <math.h> должен быть как #include <cmath>, за исключением того, что math.h должен переместить все его имена функций и т. Д. В пространство имен std ::. Если это не происходит в вашей системе Linux C++, есть проблема. К сожалению, вы не предоставили достаточно информации, чтобы выяснить, что происходит.

3

Вполне возможно, что причина того, что вам не нужно использовать зЬй :: ранее, это потому, что где-то в headerfile следующее заявление было написано:

using namespace std; 

После этого заявления, тем «станд ::» префикс больше не нужен.

Надеется, что это уточнить вещи ...

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