如何在 C++ 的头文件中定义字符串数组并设置其值?

Posted

技术标签:

【中文标题】如何在 C++ 的头文件中定义字符串数组并设置其值?【英文标题】:How to define an array of strings and set its values in header files in C++? 【发布时间】:2017-07-20 09:10:32 【问题描述】:

在我的程序中,我使用通过#define 指令定义的常量来管理程序的逻辑。同时,如果我需要打印其中一个值,我需要一些方法将这些数字映射到一个字符串。

这是我正在尝试的简化版本:

头文件:header.hpp

#ifndef HEADER_HPP
#define HEADER_HPP

#include <string>

#define CODE_0 0
#define CODE_1 1
#define CODE_2 2
#define CODE_3 3

std::string label[4];
label[CODE_0] = "label0";
label[CODE_1] = "label1";
label[CODE_2] = "label2";
label[CODE_3] = "label3";

#endif /* HEADER_HPP */

主函数:source.cpp

#include "header.hpp"
#include <iostream>

int main()

  std::cout << "Start" << std::endl;
  std::cout << "Code #" << CODE_1 << " has label '" << label[CODE_1] << "'" << std::endl;
  std::cout << "End" << std::endl;

  return 0;

但是,这不起作用。这是编译器的输出:

In file included from source.cpp:1:0:
header.hpp:12:1: error: 'label' does not name a type
 label[CODE_0] = "label0";
 ^
header.hpp:13:1: error: 'label' does not name a type
 label[CODE_1] = "label1";
 ^
header.hpp:14:1: error: 'label' does not name a type
 label[CODE_2] = "label2";
 ^
header.hpp:15:1: error: 'label' does not name a type
 label[CODE_3] = "label3";
 ^

我不确定为什么会这样。看起来这不是设置数组值的方法。正确的方法是什么?

另外,虽然这是一个不同的问题,但是将这些常量数值映射到它们各自的字符串的更好方法是什么?请注意,我希望它们保持不变(数字和字符串)。

【问题讨论】:

【参考方案1】:

你可以在头文件中初始化这个数组而无需显式赋值语句:

std::string label[4] =

    "label0"
,   "label1"
,   "label2"
,   "label3"
;

更好的方法是完全摆脱它,或者至少使它成为类静态变量并在 cpp 文件中定义。此外,最好用枚举器替换 #define CODE_0 宏。

【讨论】:

以上是关于如何在 C++ 的头文件中定义字符串数组并设置其值?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的头文件和命名空间

我如何遍历表单数组并将其值设置为打字稿中的另一个数组?

c ++:OOP:如何在单独的头文件中更新数组?

如何在 PHP 中获取 JSON 数组并打印其值?

C++--标准库 字符串类

在源文件中定义静态方法,并在 C++ 中的头文件中声明