VSCode "Невозможно открыть" abs. c ': - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть простой код на C ++ (см. Ниже), который хорошо работает и может быть успешно отлажен в Microsoft Visual Studio.

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cmath>
#include <map>
#include <set>
#include <algorithm>
#include <stdlib.h>
#include <iomanip>

using namespace std;

class Rational {
private:
    int numerator;
    int denominator;

public:
    Rational() {
        numerator = 0;
        denominator = 1;
    };
    Rational(int p, int q) {
        int divider = find_common_divider(abs(p), abs(q));
        p = p / divider;
        q = q / divider;
        if ((p < 0) && (q < 0)) {
            p = abs(p);
            q = abs(q);
        }
        else if ((p > 0) && (q < 0)) {
            p = -p;
            q = abs(q);
        }
        if (p == 0)
            q = 1;
        numerator = p;
        denominator = q;
    };

    int Numerator() const {
        return numerator;
    };
    int Denominator() const {
        return denominator;
    };
    int find_common_divider(int N1, int N2) {
        while ((N1 > 0) && (N2 > 0)) {
            if (N1 > N2)
                N1 %= N2;
            else
                N2 %= N1;
        }
        return N1 + N2;
    };

};

int main() {
    {
        const Rational r(3, 10);
        if (r.Numerator() != 3 || r.Denominator() != 10) {
            cout << "Rational(3, 10) != 3/10" << endl;
            return 1;
        }
    }

    {
        const Rational r(8, 12);
        if (r.Numerator() != 2 || r.Denominator() != 3) {
            cout << "Rational(8, 12) != 2/3" << endl;
            return 2;
        }
    }

    {
        const Rational r(-4, 6);
        if (r.Numerator() != -2 || r.Denominator() != 3) {
            cout << "Rational(-4, 6) != -2/3" << endl;
            return 3;
        }
    }

    {
        const Rational r(4, -6);
        if (r.Numerator() != -2 || r.Denominator() != 3) {
            cout << "Rational(4, -6) != -2/3" << endl;
            return 3;
        }
    }

    {
        const Rational r(0, 15);
        if (r.Numerator() != 0 || r.Denominator() != 1) {
            cout << "Rational(0, 15) != 0/1" << endl;
            return 4;
        }
    }

    {
        const Rational defaultConstructed;
        if (defaultConstructed.Numerator() != 0 || defaultConstructed.Denominator() != 1) {
            cout << "Rational() != 0/1" << endl;
            return 5;
        }
    }

    cout << "OK" << endl;
    return 0;
}

Но когда я начинаю отладку в VSCode (UBUNTU 18.04) из строки const Rational r(3, 10) в main () с "Step into" до строки

int divider = find_common_divider(abs(p), abs(q));

отладчик выдает исключение "Невозможно открыть 'abs. c': невозможно прочитать файл '/ build / glib c -OTsEL5 / glib c -2.27 / stdlib / abs. c '(Ошибка: невозможно разрешить несуществующий файл' /build/glibc-OTsEL5/glibc-2.27/stdlib/abs . c '). "

Это исключение отсутствует в Microsoft Visual Studio, и отладчик переходит к функции" find_common_divider ".

Что не так с моим VSCode?

1 Ответ

2 голосов
/ 08 апреля 2020

В вашем коде Visual Studio нет ничего плохого, у вас просто нет исходного кода для abs, поэтому вы не можете войти в него. Игнорируйте ошибку, нажмите step out, чтобы вернуться к вашему коду.

...