在C ++中的头文件中定义字符数组

时间:2018-09-22 00:23:50

标签: c++ arrays char header-files

我正在研究一个在游戏窗口中显示问题的项目。

由于该问题需要进行很多更改,因此我认为,每次定义更改时,只需定义5行定义的文本(1个问题,4个MC答案)就更容易了。

我已经在头文件中尝试过此操作:

question.qLine[150] = "TEST PHRASE";

然后在我的main.cpp中

"qLine" in "question", which is of non-class type "tagQuestion[1]"

但它返回错误char

我尝试const char*import itertools xy = [[104.44464000013596, 21.900339999891116], [9.574480000151937, 0.32839999976022227], [9.932610000251373, 0.19092000005798582], [9.821009999711748, 0.26556000039374794], [9.877130000349268, -0.6701499997226392], [149.51198999973872, -28.469329999879562], [149.35872999988965, -28.684280000021943], [9.859010000211413, -0.03293000041912819], [9.38918000035676, -0.9979400000309511], [77.35380000007001, 32.926530000359264]] xy.sort() # sorting the data sorted_data = list(xy for xy,_ in itertools.groupby(xy)) # grouping 都没有成功。

我正在尝试遵循我的教科书中的示例,但我认为我误会了它。

一旦在头文件中声明了字符数组,就不能在主文件中编辑其内容吗?

1 个答案:

答案 0 :(得分:1)

  1. [1]之后的question似乎没有任何意义。删除它。

  2. 您的答案是char数组,但您的问题是char指针数组。我很确定您不希望您的问题包含150个字符指针。

  3. 如果要更改qLine,请不要更改为const

  4. qLine[150] = ...会将值分配给具有150个元素的数组的第151个元素。既不需要您想要的东西,也不需要法律法规。您可能想要qLine =,但是不适用于数组,相反,您需要使用类似strcpy的函数,该函数将数据写入数组,但是我强烈建议您不要这样做。 (请参阅下一点)

  5. 不要在C ++中使用C。使用std::string,而不是char的数组。

  6. 如果您要定期更改字符串,请创建一个存储字符串的文件,将其加载到地图中,然后在需要的任何地方从地图中将其提取,而不必在代码中放入硬编码的字符串。这样,当您更改文本时,您无需更改任何代码。

我建议这样:

struct Question {
    std::string text;
    std::vector<std::string> answers;
};

std::map<std::string, Question> questions;

然后是这样:

ifstream questionsFile("questions.txt");
if (questionsFile.is_open())
{
    std::string line;
    while (std::getline(questionsFile, line))
    {
        // Split line into some id, text and answers, how exactly depends on the format you chose
        std::string id = ...;
        Question question;
        question.text = ...;
        question.answers.push_back(...);
        questions[id] = question;
    }
    questionsFile.close();
}
else
{
    // Handle error
}

以及您代码中的任何地方:

// Print question with id "q1":
std::cout << questions["q1"].text << std::endl;

// Print answer #2 for question with id "q1":
std::cout << questions["q1"].answers[1] << std::endl;

Question设置为隐藏其内部结构并具有访问器方法和构造函数或静态方法的类,以便通过适当的错误处理从有效行中创建新实例,这甚至会更好。