Когда я включаю библиотеку алгоритмов перед определением эпсилон, компилируется следующий код:
#include <iostream>
#include <algorithm>
#define epsilon 0.00001
int main() {
std::cout << epsilon;
return 0;
}
Когда я переключаю их, это не так:
#include <iostream>
#define epsilon 0.00001
#include <algorithm>
int main() {
std::cout << epsilon;
return 0;
}
Это дает следующую ошибку 19 раз:
epsilon_algorithm.cpp:3:17: error: expected unqualified-id before numeric constant
3 | #define epsilon 0.00001
|
На http://www.cplusplus.com/reference/algorithm/ и https://en.cppreference.com/w/cpp/algorithm нет упоминания о чем-либо с именем ' эпсилон». Я знаю, что могу избежать этой проблемы, просто всегда включая ‹алгоритм› перед определением эпсилон. Я хочу знать, что вызывает эту ошибку, чтобы расширить мое понимание C++ и предотвратить подобные ошибки в будущем.
Я компилирую с помощью MinGW (32-разрядная версия, установленная несколько недель назад) в обновленной среде Windows 10 (64-разрядная версия).
#define
для констант. Вместо этого следует использоватьinline constexpr auto epsilon = 0.00001;
или что-то подобное. Скорее всего, ‹алгоритм› включает в себя ‹лимиты› и в них действительно естьepsilon
. - person NathanOliver   schedule 15.07.2020