在 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 所指出的。
我认为要在 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 所指出的。