-1

我在尝试为 C++ 上课时遇到了一些问题。这是我的头文件.h:

#include <iostream>
#include <string>
#ifndef MESSAGES__H__
#define MESSAGES__H__

class Message
{
    public:
        Message(std::string recipient, std::string sender);
        void append(std::string text);
        std::string to_string() const;
        void print() const;
    private:
        std::string recipient;
        std::string sender;
        std::string message;
        std::string text_input;
        char* timestamp;
};

#endif

当我运行 main 方法时, getline(cin,) 给了我一些错误信息:

int main()
{
    vector <Message*> message_list;
    Message* message1 = new Message("Student1", "Gabriel");
    cout << "Enter message text line, enter . on new line to finish: " << endl;
    while(getline(cin, text_input))
    {
    }
}

getline 方法没有给我重载函数的实例。此外,从同一行开始, text_input 显示标识符未定义。我以为我已经在 .h 类中声明了?

提前致谢。

更新部分

现在所有错误都已修复:

vector <Message*> message_list;
Message* message1 = new Message("Saiful", "Gabriel");
cout << "Enter message text line, enter . on new line to finish: " << endl;
while(getline(cin, message1->get_text_input()))
{
    if(message1->get_text_input() == ("."))
    {
        break;
    }
    else
    {
        message1->append(message1->get_text_input());
    }
}

在while循环内,一次“。” 在新行的开头检测到,它应该会停止。但是,无论我输入多少次“。” 在新行,它只是不断提示。有人知道为什么吗?

4

3 回答 3

0

感觉好像你把事情复杂化了。只需在getline. 如果输入是“.” 然后中断,否则将该行附加到 Message 对象。因此,您应该能够text_input从 Message 头文件中删除成员变量。

std::vector<Message*> message_list;
Message* message1 = new Message("Saiful", "Gabriel");
std::cout << "Enter message text line, enter . on new line to finish: " << std::endl;
std::string input = "";
while(getline(std::cin, input))
{
    if(input == ".")
    {
        break;
    }
    else
    {
        message1->append(input);
    }
}
于 2013-06-28T16:47:33.740 回答
0

尝试像这样更改循环:

while(getline(cin,&message1->text_input)) 
{

}

如果我没记错的话,getline函数如下所示:

getline(isstream& stream, string& string)
于 2013-06-28T10:11:41.920 回答
0

修复“text_input 显示标识符未定义”

你需要改变

 while(getline(cin, text_input))

 while(getline(cin, message1->text_input))

这可能会修复第一个错误。

于 2013-06-28T10:07:40.127 回答