Передача пользовательского ввода в функцию с параметрами char * - PullRequest
0 голосов
/ 03 августа 2011

Я получаю следующие ошибки с моим кодом.

не может преобразовать параметр 1 из 'std :: string' в 'char *

не найден оператор, который принимает правый операнд типа 'const char *

Может кто-нибудь сказать мне, что я делаю неправильно в функции menuSelection ниже? Смысл в том, что если пользователь выбирает 1 из пунктов меню, программа получает пользовательский ввод (lastName, firstName, courseName, letterGrade) и передает его в функцию addRecord, но я думаю, что мои типы данных отключены.

Извините за длинный пост. Функция menuSelection расположена справа внизу относительно функций main () и head ().

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>

using namespace std;


void GradeBook::addRecord(char* lastName, char* firstName, char* className, char letterGrade)
{
    StudentRecord* newRecord = new StudentRecord(lastName, firstName, className, letterGrade);
    if (_headRecord == NULL) {
        _headRecord = newRecord;
    } else { 
        int compare = _headRecord->compareTo(lastName, firstName);
        if (compare < 0) {
            // we insert before the first element
            newRecord->setNext(_headRecord);
            _headRecord = newRecord;
        } else {
            _headRecord->insert(newRecord);
        }
    }
}

  void menuSelection(int selection, GradeBook& gradeBook) {

    string firstName;
    string lastName;
    string courseName;
    char letterGrade;

    switch(selection) {
        case 1: cin >> lastName.c_str() >> firstName.c_str() >> courseName.c_str() >> letterGrade;
                gradeBook.addRecord(lastName, firstName, courseName, letterGrade);
        case 4: gradeBook.read("students.txt");
                gradeBook.displayAllRecords();
                break; 
        case 5: gradeBook.write("students1.txt");
                break; 
        default: cout << "Enter a valid choice.\n"; 
        } 

        if (selection != 5) {
            displayMenu();
            cin >> selection; 
            menuSelection(selection, gradeBook);
        }
} 

void header() {
    cout << "STUDENT GRADEBOOK AND GPA CALCULATOR\n";
    cout << "=====================================\n";
}

void main()
{
    GradeBook gradeBook;

    int userSelection;
    header();
    displayMenu();
    cin >> userSelection; // get the user input for menu selection
    menuSelection(userSelection, gradeBook);

    char pause;

    std::cin >> pause;
}

Ответы [ 3 ]

3 голосов
/ 03 августа 2011
cin >> lastName.c_str() >> firstName.c_str() >> courseName.c_str()
    >> letterGrade;

Я не думаю, что вы действительно хотите это сделать.c_str() - превратить обычную std :: string в C ++ в старую «строку» в стиле C для использования с функциями, ожидающими такого зверя.

Если вы пытаетесь ввести обычную строку C ++,вы должны изменить это на:

cin >> lastName >> firstName >> courseName >> letterGrade;

На самом деле, если вы не используете библиотеку C, являющуюся частью C ++ (или сторонние функции, для которых явно требуются «строки» C), вам никогда не придется использоватьchar * стиль строки.Охватите язык и используйте std::string как можно больше.

0 голосов
/ 03 августа 2011

Прежде всего, измените все параметры, которые вы не изменяете, на const char*.Во-вторых, измените все эти параметры на тип const std::string&.В-третьих, если предыдущие шаги не удаются по какой-то причине, используйте std::string::c_str(), который возвращает const char*, который дожил до конца вызова функции.

0 голосов
/ 03 августа 2011

Посмотрите на следующий URL: http://www.bogotobogo.com/cplusplus/string.html

в секции под названием C ++ string.

Вы должны конвертировать вашу строку в символ *.

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