getline()方法没有重载函数的实例

getline() method no instance of overloaded function

本文关键字:重载 函数 实例 方法 getline      更新时间:2023-10-16

我在为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

当我运行主方法时,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循环中,一旦在新行的开头检测到".",它就会停止。然而,无论我在新行输入多少次".",它都会不断提示。有人知道为什么吗?

要修复"text_input显示标识符未定义"

您需要更改

 while(getline(cin, text_input))

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

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

尝试这样更改循环:

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

如果我没记错的话,getline函数看起来是这样的:

getline(isstream& stream, string& string)

感觉事情过于复杂了。只需在getline中使用一个临时变量。如果输入是".",则中断,否则将该行附加到Message对象。因此,您应该能够从Message头文件中删除text_input成员变量。

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