字符串未传递到 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;
 }