初始化另一个结构

时间:2016-02-10 01:26:15

标签: c++ arrays pointers struct

我完全难过了。如何填充另一个struct中包含的struct数组?

我有两个struct s:

struct employee_stats{
    char emp_name[MAX_NAME_LENGTH];
    double salary;
    int years_employed;
}

struct annual_reviews{
    int year;
    struct employee_stats employee[NO_EMPLOYEES];
}

我声明了一个指向annual_reviews结构数组

的指针
annual_reviews *sort_records = new annual_reviews[num_years];

我有一个vector个字符串,可以从程序前面的文本文件中读取。我将employee_recordyear向量发送到方法以填充两个struct

void DataSort::load_records(vector<string> employee_record, vector<string> year){
    vector<string> line_data;
    string word;

    //split employee_record by \t and into single line string vector
    for(int i = 0; i < employee_record.size(); i++){
         stringstream wordstream(employee_records[i]);
         while(getline(wordstream, word, '\t')){
             if(!word.empty())
                 line.push_back(word);
         }
    }

现在,在同一方法中,我想将此数据添加到struct s:

    for(int j = 0; j < num_years; j++){
        sort_records[i].year = atoi(year[i].c_str); //year of record
        for(int k = 0; k < NO_EMPLOYEES; k++){
            //here is where it all falls apart
            sort_records[j].employee_stats[j].emp_name = line[j]; //fill the records
        }
    }
}

我意识到我没有正确访问内部struct,但我已经卡住了,我已经撞墙了。

我使用VS2015得到两个编译错误:

std::basic_string<char,std::char_traits<char>,std::allocator<char>>::c_str':non-standard syntax;use'&'to create a pointer to member

array type 'char[25]' is not assignable

有人能指出我正确的方向吗?我是否需要创建指向成员struct的指针?我以为你可以直接为成员编制索引。

感谢。

2 个答案:

答案 0 :(得分:1)

用于制作数据类型的结构。

struct employee_stats{
    char emp_name[MAX_NAME_LENGTH];
    double salary;
    int years_employed;
}

struct annual_reviews{
    int year;
    struct employee_stats[NO_EMPLOYEES];
}
对于annual_reviews数据类型的

,我认为您使用

声明了另一种数据类型
struct employee_stats

所以我认为你应该把它声明为你想要的第二个数据数组

struct employee_stats{
    char emp_name[MAX_NAME_LENGTH];
    double salary;
    int years_employed;
}

struct annual_reviews{
    int year;
    employee_stats employeeData[NO_EMPLOYEEs];
}

在创建变量类型annual_reviews后,我认为您可以访问employeeData数组。然后对于char错误,我认为你应该在emp_name上使用string作为dataType。

[编辑] 将字符串复制到char

strcpy(sort_records[j].employee_stats[j].emp_name, line[j].c_str());

阅读来源:http://www.cplusplus.com/reference/string/string/c_str/

答案 1 :(得分:0)

你的问题是你没有正确地宣布内部结构。

您的代码看起来应该像这样(伪代码):

typedef employee_stats some_type;
Use some_type inside annual_reviews.

其余的都是微不足道的。