【问题标题】:error: default initialization of an object of const type 'const char'错误:常量类型“const char”对象的默认初始化
【发布时间】:2015-08-01 01:14:05
【问题描述】:

我收到了这个错误—— 错误:常量类型'const char'对象的默认初始化

我的代码在 c 中,错误在我的 .h 文件中。这就是代码出现错误的样子

const char *c2ptr[37]={ 0, 4, 8,11,14,16,18,20,23,25,
           27,29, 3,31,34,37, 3, 3,39,44,
           48,51,54,57,60, 3,62,65, 3,68,
           72,75, 3,77,79,81,84},
    ch,inif,*fname,
    comf[4]={ 7, 8, 9,13};

等等...错误都出现在 ch,inif,*fname... 这与它们不是数组的事实有关吗?据我所知这是合法的。

【问题讨论】:

  • 哦,它还说要添加一个显式初始化程序来初始化 'ch' 和 'inif' 等。这要求我做什么?

标签: c


【解决方案1】:

您的代码声明了四个变量:

  • c2ptr 类型项目的数组 const char*
  • char 类型的常量 ch
  • inif 类型的常量 char
  • fname 类型的变量 const char*
  • comf 类型项目的常量数组 char

首先,c2ptrconst char*(字符串)的数组,但您的代码将其初始化为int{ 0, 4, 8, 11, ... } 的列表。

其次,您的变量 chinif 是常量,但尚未为它们分配值。由于常量变量无法更改,因此您必须在声明中为其赋值。 (这可能是给你错误的原因。)

【讨论】:

    【解决方案2】:

    您为const char * 指针声明了数组,并使用int 对其进行了初始化,也许您的意思是

    static const char *c2ptr[37] = {
            "0",  "4",  "8", "11", "14", "16", "18", "20", "23", "25",
           "27", "29",  "3", "31", "34", "37",  "3",  "3", "39", "44",
           "48", "51", "54", "57", "60",  "3", "62", "65",  "3", "68",
           "72", "75",  "3", "77", "79", "81", "84"
       };
    

    【讨论】:

    • 我不认为这是他的主要问题。他试图在头文件中静态初始化一个数组,这就是编译器告诉他的。
    • 我刚试过。我卡住了“const char *tmp1 = {”hello”};”到头文件中。链接时出现“tmp1 的多重定义”错误。此外,这似乎支持我:stackoverflow.com/questions/3814804/…
    • @rost0031 你可以在头文件中初始化一个数组,但你通常不应该这样做,因为如果你在多个源文件中包含头文件,你会遇到这些错误.由于头文件只是在编译前直接插入到源文件中,所以在头文件中初始化数组的效果和在源文件中是一样的。 (在这种情况下,这不是编译器所抱怨的;它抱怨的是没有默认值的常量变量,即chinif。)
    猜你喜欢
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多