Почему я получаю <function>, а не член <class>? Я пытался передать строку и вернуться из нее - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь передать строку в функцию, которая будет отсортирована. Затем иметь отсортированную строку для возврата из нее. Он не скомпилируется и даже говорит, что «binarySort не является членом других».

Это то, что запрещено делать?

Это файл класса

#include "Others.h"
#include <iostream>

using namespace std;

char Others::inputCheck(char guess) {
    while (!isalpha(guess)) { //If the inputs are not alphabets, keep looping.
        cout << "Enter again: ";
        cin >> guess;
    }
    cin.ignore(1, '\n');
    guess = tolower(guess);

    return guess;
}

string Others::binarySort(string sampleText) {
    //Bubble sorting the string. (Copy pasted)
    for (int i = 0; i < sampleText.length(); i++)
    {
        for (int j = i + 1; j < sampleText.length(); j++)
        {
            if (sampleText[i] > sampleText[j]) //if previous has bigger ascii value than next,
            {
                //swapping the prev and next characters
                char temp = sampleText[i];
                sampleText[i] = sampleText[j];
                sampleText[j] = temp;
            }
        }
    }
    return sampleText;
}

Это заголовочный файл.

#ifndef OTHERS_HEADER
#define OTHERS_HEADER
#pragma once
class Others
{
public:
    char inputCheck(char guess); //Function to check if inputs are alphabets.
    string binarySort(string sampleText);
};

#endif

Основная функция.

#include <iostream>
#include "Others.h"

using namespace std;
int main() {
    string sortedText, sampleText = "toibeawn";
    Others sorter;
    sortedText = sorter.binarySort(sampleText);
    cout << "Text after sorted:\n";
    cout << sortedText;

    return 0;
}

Сортировка работает, если она не используется для функции.

Вывод ошибки:

1> Sorting_test. cpp 1> Others. cpp 1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ Others.h (9, 7): ошибка C2039: «строка»: не является членом «std»

1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ предопределенных типов C ++ (внутренний компилятор) (368): сообщение: см. Объявление 'std'

1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ Others.h (9,24): ошибка C3646: ' binarySort ': неизвестный спецификатор переопределения

1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ Others.h (9,24): ошибка C2059: синтаксическая ошибка:' ('1 > C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ Others.h (9,30): ошибка C2 039: 'string': не является членом 'std'

1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ предопределенных типов C ++ (внутренний компилятор) (368): сообщение: см. объявление 'std'

1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ Others.h (9,48): ошибка C2238: неожиданный токен (ы) предшествующий ';'

1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ Others. cpp (16,21): ошибка C2039: «binarySort»: не является член 'Others'

1> C: \ Users \ yap_2 \ source \ repos \ Sorting \ Sorting_test \ Others.h (5): сообщение: см. объявление «Others» 1> Создание кода. .. 1> Закончен строительный проект "Sorting_test.vcxproj" - СБОЙ.

Ответы [ 3 ]

1 голос
/ 10 марта 2020

Все хорошо. Требовать изменений, простое изменение.

  • в вашем заголовке включите этот заголовок: #include и используйте пространство имен std.

Так что после изменений ваш заголовок выглядит как

#ifndef OTHERS_HEADER
#define OTHERS_HEADER
#pragma once

#include <iostream>
using namespace std;

Основная проблема в том, что в вашем заголовке строка не разрешена из-за озера заголовка строки и пространства имен std.

Примечание. Всегда старайтесь сначала включать языковые заголовки, а затем настраиваемые заголовки.

1 голос
/ 10 марта 2020

Вы включаете "Others.h" до объявления using namespace std, что приводит к тому, что string не распознается во включенном заголовке.

Добавьте using namespace std; в заголовок "Others.h" и ошибка пропадет.

Как правило, плохая практика - иметь using namespace std в заголовках, и вам лучше просто написать std::string.

0 голосов
/ 10 марта 2020

std::string binarySort(std::string sampleText)

Требуется пространство имен

...