sqrt не является членом std

Я компилирую свою программу в Linux — она ​​имеет следующую строку:

std::sqrt((double)num);

На окнах это нормально, но на Linux я получаю ‘sqrt’ не является членом ‘STD’
У меня есть включение для math.h

в чем проблема с этим?

10

Решение

Измените директиву на #include <cmath>, C ++ заголовки формы <cxxxxxxx> гарантированно иметь стандартные имена в std пространство имен (и может необязательно предоставлять их в глобальном пространстве имен). <xxxxxx.h> не.

16

Другие решения

это просто потому что <math.h> не объявляет функции в namespace std, Он был включен в стандарт C ++ только для совместимости. Правильное включение C ++ будет <cmath>,

§D.5,2

Каждый заголовок C, каждый из которых имеет имя вида name.h, ведет себя так, как будто каждое имя помещено в стандартное пространство имен библиотеки cname заголовок помещается в глобальную область имен. Не определено, были ли эти имена впервые объявлены или определены в пределах области имен пространства имен std и затем вводятся в глобальную область имен пространства явным с помощью деклараций.

То, что ваш код работает под Windows, было чистой удачей — если вы хотите так его назвать. Последнее предложение дает подсказку, что может происходить под окнами, но не под linux: очевидно, что под окнами имена допустимы как в глобальном пространстве имен, так и в пространстве имен std,

2

По вопросам рекламы [email protected]