【问题标题】:How to fix " No viable overloaded '=' " in C++如何在 C++ 中修复“没有可行的重载 '='”
【发布时间】:2018-09-16 20:40:46
【问题描述】:

此函数的目的是将 .txt 文件的各个行放入不大于 20 的数组中。但是,如果无法将循环中的每一行分配给该数组,我不知道如何进行。

int read_file(string file_name, person map[20], int 
line_limit)
{
    int line_count = 0;
    string x;
    person specific;

顺便说一句,person 类有 2 个名为 first_name 和 last_name 的字符串以及 1 个名为 age 的 int。 StackOverflow 不允许我发布我猜想的整个程序。

    fstream input_file;



    input_file.open(file_name, ios::in); 
    if (input_file.is_open())
    {
        cout << "WORKING" << endl;
        //Loop through .txt file
        while (!input_file.eof() && line_count < 
line_limit)
        {
            if (input_file.good())
            {
                input_file >> x;
                map[line_count] = x;   

ABOVE 行派生“没有可行的重载 '='”错误。

                line_count++;
            }

        }
     }
    else
        cout << "Not Working" << endl;
        return 1;

    return 0;
}

任何提示也会很棒!

这是我循环浏览的 .txt 文件。当我遍历 .txt 文件时,我想分配每个名字、姓氏和年龄。我想将它分配给字符串 x,然后将当时 x 中的内容放入人员类型的数组中,该数组接受参数字符串 last_name、字符串 first_name 和 int age。

Ann Christensen  70
Carlos Morales   68
David Bowman     45
Frank Bowman     37
John Bowman      30
Kathleen Gueller 34
Mark Bowman      42
Mark Bowman      13
Richard Bowman   47
Susan Cox        36
class person
{



private:
    string first_name;
    string last_name;
    int age;

//Person Constructor - Empty
public:
    person()
    {
        first_name = "";
        last_name = "";
        age = 0;

        //void get(istream &);
        //void put(ostream &);
        //bool operator = ();
}

【问题讨论】:

  • string 不是person,那么您希望map[line_count] = x; 做什么?
  • 我正在尝试将字符串 x 分配给 first_name,然后是 last_name,然后是 age,因为它遍历了这个 .txt 文件。安克里斯滕森 70 卡洛斯莫拉莱斯 68 大卫鲍曼 45 弗兰克鲍曼 37 约翰鲍曼 30 凯瑟琳古勒 34 马克鲍曼 42 马克鲍曼 13 理查德鲍曼 47 苏珊考克斯 36
  • 如果可以的话,我会将 .txt 文件添加到帖子中...
  • 更相关的是person 的定义,尽管是什么阻止了你只做map[line_count].first_name = x; 之类的事情(或者如果你有一个setter,则使用setter)?
  • 这会起作用@UnholySheep 还是我会得到相同的 = 运算符错误?不过我肯定会尝试的。

标签: c++


【解决方案1】:

您正在尝试将字符串分配到应包含person 对象的位置。这会尝试执行 1,或者,如果失败,则继续执行 2。

  1. 使用类person定义的转换将字符串转换为person,类似于operator string()

  2. 使用方法operator=(string) 将字符串分配给person。这必须在person 类中定义。

另一个选项,因为,我认为你想要做的是分配给一个特定的成员,是定义一个 setter 方法。通常,这看起来像set_first_name(string),如果您正在为first_name 定义一个setter,并将first_name 分配给接受的参数。基本上,你只需要在课堂之外设置first_name

如果您将一个字符串分配给另一个字符串,您将不会收到operator= 错误。这只发生在用户定义的类中。

【讨论】:

    猜你喜欢
    • 2023-01-29
    • 2018-08-26
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多