【问题标题】:getline() method no instance of overloaded functiongetline() 方法没有重载函数的实例
【发布时间】:2013-06-29 18:09:58
【问题描述】:

我在尝试为 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循环中,一次“.”在新行的开头检测到,它应该会停止。但是,无论我输入多少次“。”在新行,它只是不断提示。有人知道为什么吗?

【问题讨论】:

  • 你应该把错误复制粘贴到这里。
  • 在这里复制粘贴错误是什么意思?我已经在最后几行写了。我什至无法运行程序,您对堆栈跟踪有何期望?
  • 我的意思是编译器错误,换句话说“正在给我一些错误信息:”
  • 不过先试试我的答案,可能会解决这两个问题
  • 抱歉。因为我以前把错误写在底部

标签: c++ getline


【解决方案1】:

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

你需要改变

 while(getline(cin, text_input))

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

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

【讨论】:

  • 更改为成员的错误无法访问。因为它被宣布为私有权利?但是我应该如何解决呢?
【解决方案2】:

尝试像这样改变你的循环:

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

}

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

getline(isstream& stream, string& string)

【讨论】:

  • 哦,您应该为您的成员编写 getter 和 setter 函数。将 text_input 更改为 public 将解决您的问题,但它是无效的
  • 不不,while循环里面的代码,我解决错误后马上做。
  • @Marcel-Is-Hier 使用格式并提供链接以确保您“正确记住”en.cppreference.com/w/cpp/string/basic_string/getline
  • 要解决您的错误,您需要了解 private 和 public 的作用......因为您的 text_input 成员是私有的,所以在课堂外无法访问。你应该保密。现在为这个成员编写一个 getter 和 setter 函数。这是一个简单的 getter 函数 public string TextInput() { return text_input; } 使用带有私有成员的 getter 和 setter 可以促进你的类的封装 :) 希望这会有所帮助。
  • 我已经写过了,但效果不佳。 while(getline(cin, message1->get_text_input())) { if(message1->get_text_input() == (".")) { break; } else { message1->append(message1->get_text_input()); } }
【解决方案3】:

感觉好像你把事情复杂化了。只需在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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2013-11-17
    • 1970-01-01
    • 2016-03-16
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多