代码之家  ›  专栏  ›  技术社区  ›  ArthurTheLearner

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

  •  0
  • ArthurTheLearner  · 技术社区  · 7 年前

    在我的程序中,我使用通过 #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 回复  |  直到 7 年前
        1
  •  1
  •   user7860670    7 年前

    您可以在头文件中初始化此数组,而无需显式赋值语句:

    std::string label[4] =
    {
        "label0"
    ,   "label1"
    ,   "label2"
    ,   "label3"
    };
    

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