【问题标题】:C4047 - Levels of Indirection - Struct initializationC4047 - 间接级别 - 结构初始化
【发布时间】:2014-04-13 17:34:28
【问题描述】:

我实际上正在使用我公司的一些旧软件,我试图弄清楚如何让这些东西正常工作。

经过一些数据库编辑,我得到了一个软件,它给了我一些 *.C 文件,以便以后编译得到一个环境模拟工具。

我的主要问题是我没有设法让任何编译工作。我面临 2 个电源错误:

错误:C2097:非法初始化

警告 C4047 'Initializing':不同级别的间接。

我开始研究是为了了解这些间接级别。我想我理解试图用数据指针等保存指针指针的事情。

代码不是我的。所有这些都在计算机中使用应用程序生成。关键是开发所有这些东西的人都退休了。

以下是代码的主要部分:

ST_FAMI.H

struct  bit
{
    unsigned bit0   :1;
    unsigned bit1   :1;
    unsigned bit2   :1;
    unsigned bit3   :1;
    unsigned bit4   :1;
    unsigned bit5   :1;
    unsigned bit6   :1;
    unsigned bit7   :1;
    unsigned bitnul :8;
};

union etatbit
{
    int VETAT ;
    struct bit VBIT;
};

typedef struct
{
    union etatbit VACTUEL;
    union etatbit VANTERI;
    int VISUELEM;
    int TMPCARTC;
} elemoct;


struct FAMI
{
    char  *PLIBFAMI;                
    int   PNBELEM ;                 
    char  PTYPFAMI[2];              
    int   PMSGRANCOM[2];    
    char  PNBLIUTI;                 
    char  VETAVISFAMI;
    char  VNUMLIU;
    char  VPAGFAMI;
    unsigned char  PNUMPSBAC;
    unsigned int   PNUMGRPA[5];
    char  PNUMVOIE;

    elemoct   *Tptelmsg;            
 };

我的 M1L0PS1.C 文件:

line 1:  #include "st_fami"
line 2: 
line 3:  elemoct  E_L0PS1Pq0[64];
line 4:  struct FAMI L0PS1Pq0 =
line 5:  {"L0PS1Pq0",   
line 6:  64,                
line 7:  {'M','P'},      
line 8:  {'T',0 },       
line 9:  17,             
line 10: 0,              
line 11: 0,              
line 12: 0,              
line 13: 1,              
line 14: 0,              
line 15: 0,              
line 16: E_L0PS1Pq0};    

错误日志:

M1L0PS1.C
M1L0PS1.C(16) : error C2097: illegal initialization
M1L0PS1.C(16) : warning C4047: 'initializing' : different levels of indirection

我的问题: 我没有得到间接错误的级别。 我试着给我的初始化差异数据,如:&(E_L0PS1Pq1[0])(元素 0 的地址),但它没有按预期工作。

这段代码有什么问题?我注意到一个合适的 C 开发人员。我曾经做过一些 C++ 或 Java,但由于那些不太严格的语言,我对指针的了解有点偏颇。 我正在使用“Microsoft (R) C Optimizing Copiler Version 5.10”进行编译。

对不起,我的英语很抱歉,如果有人通读全文,谢谢! :D

【问题讨论】:

  • 请编辑您的问题以包含 completeunedited 错误日志。还要展示一些更完整的代码(最好是所谓的SSCCE),包括指出错误所在的源代码。
  • 针对 Etabit 问题进行了编辑。我会更准确地重新格式化我的问题。
  • 这里编译得很好。我认为你的编译器太旧了。
  • @MichaelWalz 我认为unsigned int PNUMGRPA[5] = 0; 不会在任何符合标准的 C 编译器上编译得很好。我认为你的编译器太旧了:)
  • 这是一个很好的答案;)我正在使用 DOS 计算机。但是一切都应该工作,因为我使用的软件至少是 20yo(编译器 .exe 文件来自 1988 年 3 月 7 日:D)我会寻找另一个编译器版本,但我有点害怕兼容性问题。一切看起来都“冻结”了,因为软件正在协同工作,并且任何名称更改都会破坏一切(即使路径..一切都是硬编码的)我挠了 2 天才敢在这里问我的问题。

标签: c arrays pointers struct indirection


【解决方案1】:

PNUMGRPA[5] 是一个数组。您尝试使用0 而不是{0} 对其进行初始化。

【讨论】:

  • 看来这解决了一切!太专注于编译器给我的错误我觉得很愚蠢。
【解决方案2】:

您没有正确初始化PNUMGRPA 成员。

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多