VSCode: clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v, чтобы увидеть вызов) - PullRequest
0 голосов
/ 04 мая 2020

Я создал код для одного из моих классов, где я должен разделить строку и показать, сколько уникальных символов содержится во второй строке. Тем не менее, каждый раз, когда я пытаюсь создать код, я получаю «clang: error: linker сбой с кодом выхода 1 (используйте -v для просмотра вызова)». Я посмотрел на другие вопросы об этой ошибке и не нашел решения для VSCode (на MacBook Pro, если это имеет какое-то значение). Кто-нибудь видит, где моя ошибка? Также под вопрос: мне обязательно нужна строка #include? Мне сказали, что std :: string является частью библиотеки iostream. Если мне для этого не нужна библиотека строк, когда мне понадобится строка? Спасибо всем.

    #include <iostream>
    #include <string>

    int splitwords(std::string, char);
    int findnumchar(std::string);

    int main()
    {
        std::string txt1("ABCDEF,GHI,JKLMN,OP");
        std::string txt2("BACDGABCDAZ");
        int result;
        char delimiter = ',';
        result = splitwords(txt1, delimiter);

        result = findnumchar(txt2);


    }

    int splitwords(std::string txt, char delimiter)
    {
        int start, found, cnt = 0;
        std::string splitstr;

        start = 0;
        while ((found = txt.find(delimiter, start)) != std::string::npos)
        {
            splitstr = txt.substr(start, found - start);
            std::cout << "Split  Word" << splitstr << std::endl;
            start = found + 1;
            cnt += 1;
        }
        splitstr = txt.substr(start, txt.length() - start);
        std::cout << "Split  Word" << splitstr << std::endl;
        return cnt + 1;
    }

    int findnumchnar(std::string txt)
    {

        int uniquecnt = 0, index;
        int seen[26] = {0};
        std::string::iterator iter;
        for (iter = txt.begin(); iter < txt.end(); iter++)
        {
            index = *iter - 'A';
            if (seen[index] == 0)
            {
                seen[index] = 1;
                uniquecnt+=1;
            }
        }

        for (int i = 0; i <= 26; i++)
        {
            if (seen[i] == 1)
            {
                std::cout << static_cast<char>(i + 'A') << "\t";
            }
        }
        std::cout << std::endl;
        std::cout << "The number of unique characters: " << uniquecnt << std::endl;
        return uniquecnt;
    }

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

У меня был findnumchnar () вместо объявленного findnumchar ()

0 голосов
/ 04 мая 2020

Поскольку std::string::npos является 64-битной константой, а found является 32-битным целым числом, компилятор жалуется, что условие внутри while, в то время как l oop никогда не выполняется (поскольку found никогда не может теоретически получить достаточно большой, чтобы быть равным std :: string :: npos). Чтобы решить эту проблему, просто замените int на unsigned long long int. Смотрите полный фрагмент кода ниже:

    #include <iostream>
    #include <string>

    int splitwords(std::string, char);
    int findnumchar(std::string);

    int main()
    {
        std::string txt1("ABCDEF,GHI,JKLMN,OP");
        std::string txt2("BACDGABCDAZ");
        int result;
        char delimiter = ',';
        result = splitwords(txt1, delimiter);

        result = findnumchar(txt2);


    }

    int splitwords(std::string txt, char delimiter)
    {
        unsigned long long start, found, cnt = 0;
        std::string splitstr;

        start = 0;
        while ((found = txt.find(delimiter, start)) != std::string::npos)
        {
            splitstr = txt.substr(start, found - start);
            std::cout << "Split  Word" << splitstr << std::endl;
            start = found + 1;
            cnt += 1;
        }
        splitstr = txt.substr(start, txt.length() - start);
        std::cout << "Split  Word" << splitstr << std::endl;
        return cnt + 1;
    }

    int findnumchnar(std::string txt)
    {

        int uniquecnt = 0, index;
        int seen[26] = {0};
        std::string::iterator iter;
        for (iter = txt.begin(); iter < txt.end(); iter++)
        {
            index = *iter - 'A';
            if (seen[index] == 0)
            {
                seen[index] = 1;
                uniquecnt+=1;
            }
        }

        for (int i = 0; i <= 26; i++)
        {
            if (seen[i] == 1)
            {
                std::cout << static_cast<char>(i + 'A') << "\t";
            }
        }
        std::cout << std::endl;
        std::cout << "The number of unique characters: " << uniquecnt << std::endl;
        return uniquecnt;
    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...