我的代码出现以下错误。
cannot convert parameter 1 from 'std::string' to 'char *
no operator found which takes a right-hand operand of type '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;
}
最佳答案
cin >> lastName.c_str() >> firstName.c_str() >> courseName.c_str()
>> letterGrade;
我不认为你真的想那样做。 c_str()
是将常规的 C++ std::string 转换为旧的 C 风格“字符串”,以便与需要这种野兽的函数一起使用。
如果您尝试输入常规 C++ 字符串,则应将其更改为:
cin >> lastName >> firstName >> courseName >> letterGrade;
事实上,除非您正在使用 C++ 的 C 库部分(或明确需要 C“字符串”的第三方函数),否则您永远不需要使用 char *
风格的字符串。拥抱语言并尽可能使用 std::string
。
关于c++ - 将用户输入传递给带有 char* 参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926877/