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

Having trouble initializing a struct in c++

我认为要在 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;
}

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

_cpinfo MyScructVar;

你的结构名称是_cpinfo,你使用这个类型来创建那个类型的变量。

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

LPCPINFO cpinfo = new CPINFO();

或者您可以只使用 CPINFO 结构:

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

既然你把这个问题标记为 C++,如果你用 C++ 方式定义你的 struct 会更清楚:

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 名称感到困惑,并认为它就是结构本身。

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

_cpinfo *whatever;

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