无法从大括号括起初始化列表转换为struct

时间:2017-10-20 23:21:28

标签: c++

我环顾四周,无法找到能够清楚回答问题的问题所以我发布了这个问题。 当我尝试编译代码时出现此错误:

welcomebits.cpp:30:74: error: could not convert ‘{tmp_fullname, tmp_user_name, tmp_PIN, tmp_balance}’ from ‘<brace-enclosed initializer list>’ to ‘User’
             User u={tmp_fullname, tmp_user_name, tmp_PIN, tmp_balance};
                                                                      ^

为什么会这样?我是c ++的新手,我只是习惯了结构,类和对象仍然超出我的范围。我最近通过引用和指针学习了所以我从基本意义上理解的那些。

这是我的结构定义和发生错误的函数:

struct User{
    std::string fullname="";
    std::string user_name="";
    float PIN=0.;
    float balance=0.;
};


void create_user_data(std::vector<User>& uv){

    std::ifstream reader;
    std::string holder="";
    char comma=',';
    std::string tmp_fullname="";
    std::string tmp_user_name="";
    float tmp_PIN=0.;
    float tmp_balance=0.;

    reader.open("database.csv");

    while(std::getline(reader, holder)){
            std::istringstream ss(holder);
            std::getline(ss, tmp_fullname, ',');
            std::getline(ss, tmp_user_name, ',');
            ss>>tmp_PIN>>comma;
            ss>>tmp_balance;

            User u={tmp_fullname, tmp_user_name, tmp_PIN, tmp_balance};
            uv.push_back(u);
    }
}

感谢您的时间并帮助每个人。

1 个答案:

答案 0 :(得分:3)

您需要在启用C ++ 14支持的情况下进行编译。 C ++ 11及更早版本的标准不支持此功能。 C ++ 14允许在具​​有成员初始值设定项的类/结构上使用aggregate initialization。如果您删除了默认成员初始值设定项:

struct User{
    std::string fullname;
    std::string user_name;
    float PIN;
    float balance;
};

然后你的代码将用C ++ 11编译。