Почему __gcd () выдает ошибку в macOS mojave? - PullRequest
0 голосов
/ 20 октября 2018
#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>

using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> a(n);

    for(int i = 0; i < n; ++i)
        cin >> a[i];

    int ans = a[0];
    for(int i = 1; i < n; ++i)
       ans = __gcd(ans, a[i]);

    cout << ans << endl;

    return 0;
}

Выдает следующую ошибку:

ошибка: статический сбой не выполнен из-за требования '! Is_signed :: value'

примечание: в экземпляре специализации шаблона функции 'std:: __ 1 :: __ gcd 'запрошено здесь ans = __gcd (ans, a [i]);

Я использую команду g ++ -std = c ++ 17, которая работала для каждой программы, кроме этой.

Этот код работает без ошибок на онлайн-компиляторе code.hackerearth.com, который использует g ++ 5.4.0

EDIT: удален бит / stdc ++. H заголовок и включены только необходимые заголовки.

После удаления также возникает та же проблема.Ребята, которые прокомментировали или проголосовали, либо просто не понимают проблему, либо просто пытаются игнорировать проблему, которую не могут решить, просто сказав ее из-за заголовка.

Позвольте мне объяснить вам ясно.ЖЕ код работает правильно в онлайн иде.Ссылка одного из таких идей: ONLINE IDE

Использование их компилятора c ++ и функции __gcd (a, b) не дает никакой ошибки, но, когда я изменяю ее на gcd (a, b) в том же смысле, это дает ошибку, что это определение функции не найдено.

Когда я запускаю тот же код на моей локальной машине, все происходит как раз наоборот.__gcd (a, b) не работает, пока работает gcd (a, b).

Теперь, не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 20 октября 2018

Не используйте bit/C++.h, это частный заголовок.

Используйте правильные функции C ++: https://en.cppreference.com/w/cpp/numeric/gcd

Они поддерживают целые числа со знаком.

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

int main() {
int n;
cin >> n;
vector<int> a(n);

for(int i = 0; i < n; ++i)
    cin >> a[i];

int ans = a[0];
for(int i = 1; i < n; ++i)
   ans = gcd(ans, a[i]);

cout << ans << endl;

return 0;
}

работает с clang++ -std=c++17.

...