在c ++中初始化结构时遇到问题

时间:2015-03-19 20:07:40

标签: c++ struct

我认为在C ++中初始化struct所做的就是使用struct的名称和变量。但是,我在此功能警告中未初始化警告。

如何初始化LPCPINFO cpinfo struct

#include <iostream>
#include <string.h>
#include <sstream>
using namespace std;

const int MAX_DEFAULTCHAR =   2;

const int MAX_LEADBYTES   =  12;

typedef struct _cpinfo {
    unsigned int MaxCharSize;
    char DefaultChar[MAX_DEFAULTCHAR];
    char LeadByte[MAX_LEADBYTES];
} CPINFO, *LPCPINFO;


int main() {

     LPCPINFO cpinfo;
     cpinfo->DefaultChar[0]= 1;
     cpinfo->DefaultChar[1]= 0;
     cpinfo->LeadByte[0] = cpinfo->LeadByte[1] = 0;
     cpinfo->MaxCharSize =  4;

     cout << cpinfo->DefaultChar[0] << " " << cpinfo->DefaultChar[1] << " "
         << cpinfo->LeadByte[0] << " " <<cpinfo->LeadByte[1] << " "
         << cpinfo->MaxCharSize
         << endl;

    return 0;
}

3 个答案:

答案 0 :(得分:3)

LPCPINFO被定义为指向CPINFO结构的指针(请注意*中的typedef)。你需要分配内存:

LPCPINFO cpinfo = new CPINFO();

或者您可以使用CPINFO结构:

CPINFO cpinfo;
cpinfo.DefaultChar[0] = 1;
//...

答案 1 :(得分:1)

初始化结构变量将如下所示:

_cpinfo MyScructVar;

结构的名称是_cpinfo,您可以使用此类型创建该类型的变量。

答案 2 :(得分:1)

由于您将此问题标记为C++,因此如果您定义了struct C ++方式,它会更加清晰:

struct _cpinfo {
    unsigned int MaxCharSize;
    char DefaultChar[MAX_DEFAULTCHAR];
    char LeadByte[MAX_LEADBYTES];
};

然后main变成了这个:

int main() 
{
    _cpinfo cpinfo;
    cpinfo.DefaultChar[0]= 1;
    cpinfo.DefaultChar[1]= 0;
    cpinfo.LeadByte[0] = cpinfo.LeadByte[1] = 0;
    cpinfo.MaxCharSize =  4;

    cout << cpinfo.DefaultChar[0] << " " << cpinfo.DefaultChar[1] << " "
    << cpinfo.LeadByte[0] << " " <<cpinfo.LeadByte[1] << " "
    << cpinfo.MaxCharSize
    << endl;

    return 0;
}

很可能,您对typedef名称感到困惑,并认为它是结构本身。

另外,如果你想要一个指向struct的指针,那么声明一个指向struct的指针:

_cpinfo *whatever;

隐藏在typedef后面的指针可能会在您最喜欢的C API中使用,但我不建议您在自己的代码中执行此操作,正如@CaptainOblivious所指出的那样。