字符串没有传递给类函数

时间:2015-02-22 20:46:13

标签: c++ vector

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;

}

以上不是完整的代码。现在的问题是它打印&#34;输入主题&#34;并结束该计划。为什么我没有被提示cin?

2 个答案:

答案 0 :(得分:2)

您发布的代码有几个问题,无法编译。以下适用于我

// 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


由于您已在问题中说明了&#34;这不是完整的代码&#34; ,我怀疑您在其他部分中有一些错误没有出现。

  

&#34;为什么我没有被提示cin?&#34;

可能的一种可能是您之前在cin上有其他输入,这些输入无效且cin进入fail()状态。 为防止这种情况发生,您可以在cin.clear();来电之前添加getline()声明。

如果您接受输入,例如数字,你应该检查这样的有效性

 int x;
 do {
     cout << "Enter a number please: "
     if(cin >> x) {
         break;
     }
     cout << "Not a valid number, try again." << endl;
     cin.clear();
 } while(true);

答案 1 :(得分:0)

由于您的上述代码看起来是正确的。 我建议你先让提示工作。 然后再添加更多代码。 我刚刚在自己的环境中测试了以下内容

#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;
 }