字符串未传递到 class 函数
String not getting passed into class function
class Message {
public:
void changeSubject(string);
string getSubject();
private:
string subject;
};
void Message::changeSubject (string subjecto) //change subject{
subject = subjecto;
}
string Message::getSubject () //return subject {
return subject;
}
int main ()
{
Message person;
string aboutwhat;
cout << "Enter subject" << endl;
getline(cin, aboutwhat);
person.changeSubject(aboutwhat);
cout << person.getSubject();
return 0;
}
以上不是完整代码。现在的问题是它打印 "Enter Subject" 并结束程序。为什么我没有提示输入 cin?
您发布的代码有几个问题,无法编译。以下对我有用
// Include al necessary headers:
#include <iostream>
#include <string>
// Either qualify the namespace of `std::string`, `std::cin`, etc
// or place a using statement like follows
using namespace std;
class Message {
public:
void changeSubject(string);
string getSubject();
private:
string subject;
};
void Message::changeSubject (string subjecto) //change subject
{ // <<< You have hidden the opening brace after the comment above
subject = subjecto;
}
string Message::getSubject () //return subject
{ // <<< You have hidden the opening brace after the comment above
return subject;
}
int main ()
{
Message person;
string aboutwhat;
cout << "Enter subject" << endl;
getline(cin, aboutwhat);
person.changeSubject(aboutwhat);
cout << person.getSubject();
return 0;
}
请查看工作示例 here。
既然你在你的问题中提到了,"This isn't the full code",我怀疑你在其他没有显示的部分有一些错误。
"Why am I not prompted to cin?"
一个可能的可能性是您之前在 cin
上有其他输入,这些输入无效并且 cin
进入 fail()
状态。
为防止这种情况,您可以在 getline()
调用之前放置一个 cin.clear();
语句。
如果您接受输入,例如数字,你应该像这样检查有效性
int x;
do {
cout << "Enter a number please: "
if(cin >> x) {
break;
}
cout << "Not a valid number, try again." << endl;
cin.clear();
} while(true);
因为您上面的代码看起来是正确的。
我建议您首先让提示工作。
然后稍后添加更多代码。
我刚刚在自己的环境中测试了以下内容
#include <iostream>
#include <string>
main ()
{
std::string aboutwhat;
std::cout << "Enter subject" << std::endl;
std::getline (std::cin,aboutwhat);
std::cout << "Subject: " << aboutwhat << std::endl;
return 0;
}
class Message {
public:
void changeSubject(string);
string getSubject();
private:
string subject;
};
void Message::changeSubject (string subjecto) //change subject{
subject = subjecto;
}
string Message::getSubject () //return subject {
return subject;
}
int main ()
{
Message person;
string aboutwhat;
cout << "Enter subject" << endl;
getline(cin, aboutwhat);
person.changeSubject(aboutwhat);
cout << person.getSubject();
return 0;
}
以上不是完整代码。现在的问题是它打印 "Enter Subject" 并结束程序。为什么我没有提示输入 cin?
您发布的代码有几个问题,无法编译。以下对我有用
// Include al necessary headers:
#include <iostream>
#include <string>
// Either qualify the namespace of `std::string`, `std::cin`, etc
// or place a using statement like follows
using namespace std;
class Message {
public:
void changeSubject(string);
string getSubject();
private:
string subject;
};
void Message::changeSubject (string subjecto) //change subject
{ // <<< You have hidden the opening brace after the comment above
subject = subjecto;
}
string Message::getSubject () //return subject
{ // <<< You have hidden the opening brace after the comment above
return subject;
}
int main ()
{
Message person;
string aboutwhat;
cout << "Enter subject" << endl;
getline(cin, aboutwhat);
person.changeSubject(aboutwhat);
cout << person.getSubject();
return 0;
}
请查看工作示例 here。
既然你在你的问题中提到了,"This isn't the full code",我怀疑你在其他没有显示的部分有一些错误。
"Why am I not prompted to cin?"
一个可能的可能性是您之前在 cin
上有其他输入,这些输入无效并且 cin
进入 fail()
状态。
为防止这种情况,您可以在 getline()
调用之前放置一个 cin.clear();
语句。
如果您接受输入,例如数字,你应该像这样检查有效性
int x;
do {
cout << "Enter a number please: "
if(cin >> x) {
break;
}
cout << "Not a valid number, try again." << endl;
cin.clear();
} while(true);
因为您上面的代码看起来是正确的。 我建议您首先让提示工作。 然后稍后添加更多代码。 我刚刚在自己的环境中测试了以下内容
#include <iostream>
#include <string>
main ()
{
std::string aboutwhat;
std::cout << "Enter subject" << std::endl;
std::getline (std::cin,aboutwhat);
std::cout << "Subject: " << aboutwhat << std::endl;
return 0;
}