我的代码出现以下错误。
无法将参数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;
}
答案 0 :(得分:3)
cin >> lastName.c_str() >> firstName.c_str() >> courseName.c_str()
>> letterGrade;
我不认为你真的想这样做。 c_str()
是将常规的C ++ std :: string转换为旧的C风格&#34;字符串&#34;用于期望这种野兽的功能。
如果您尝试输入常规C ++字符串,则应将其更改为:
cin >> lastName >> firstName >> courseName >> letterGrade;
事实上,除非您使用C ++的C库部分(或明确需要C&#34;字符串&#34;的第三方函数),否则您永远不需要使用{{1} }字符串的样式。接受该语言并尽可能使用char *
。
答案 1 :(得分:0)
首先,将您未修改的所有参数更改为const char*
。其次,将所有参数更改为const std::string&
类型。第三,如果前面的步骤由于某些设计原因而失败,请使用std::string::c_str()
返回一个const char*
,直到函数调用结束。
答案 2 :(得分:-1)