如何编辑struct数组中的变量?

时间:2014-01-10 02:12:33

标签: c++ arrays pointers struct

我用谷歌搜索,问我的同学,最后问我的教授这个特殊的问题,但我还没有找到解决方案。我希望有人可以帮助我。

基本上,我需要创建一个结构数组,每个结构包含4条信息:国家名称,国家/地区,国家/地区和国家/地区密度。此信息将从.txt文档写入数组中的结构。然后,该信息将从所述阵列写入控制台。

不幸的是,在尝试向数组中的结构写入任何内容时,我得到2个错误。 “无法从'const char [8]'转换为'char [30]'”和“no operator'[]'匹配这些操作数,操作数类型为:CountryStats [int]”。这些错误都引用了这一行:

countries[0].countryName = "A";

请记住,我只是开始使用结构,这是我第一次在数组中使用它们。此外,我必须使用数组,而不是矢量。

这是我的代码:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

struct CountryStats;
void initArray(CountryStats *countries);

const int MAXRECORDS = 100;
const int MAXNAMELENGTH = 30;

struct CountryStats
{
    char countryName[MAXNAMELENGTH];
    int population;
    int area;
    double density; 
};

// All code beneath this line has been giving me trouble. I need to easily edit the 
// struct variables and then read them.
int main(void)
{
    CountryStats countries[MAXRECORDS];
    initArray(*countries);
}

void initArray(CountryStats countries)
{
    countries[0].countryName = "A";
}

截至目前,我只想弄清楚如何将信息写入数组中的结构,然后将其中的信息读取到控制台上。在找到解决方案后,其他所有内容都应该落实到位。

哦,最后一点说明:我还没有完全学会指针(*)的功能。我仍然是C ++的新手,因为我过去的编程教育主要是Java。在我们的同学和教授中,为了解决这个问题,任何和所有指针包含都会受到影响。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您没有为以下内容定义定义:

void initArray(CountryStats *countries);

但是:

void initArray(CountryStats countries);

其中countries不是数组。由于没有为operator[]定义CountryStats,因此表达式countries[0]无法编译。

由于您无法使用std::vector(出于一些奇怪的原因),我建议您使用std::array

template<std::size_t N>
void initArray(std::array<CountryStats, N>& ref) {
    for (std::size_t i = 0; i < N; i++)
        // initialize ref[i]
}

当然,如果你觉得受虐狂,你也可以使用C风格的数组:

void initArray(CountryStats* arr, int size) {
    for (int i = 0; i < size; i++)
        // initialize arr[i]
}

但是你可能需要提供数组的维度作为第二个参数。

答案 1 :(得分:0)

两个问题

void initArray(CountryStats countries)

必须是:

void initArray(CountryStats *countries)

您必须使用strcpy复制c样式字符串。 (但我建议使用c ++ string而不是char [])

strcpy(countries[0].countryName,"A");

但我再说一遍,使用像vector&lt;&gt;这样的c ++功能和字符串。