在下面的2克的样品(以下作品的第一码块和第二码下部块不)为什么需要一个变量指向一个结构
#include <iostream>
#include <vector>
#include <string>
struct padStruct
{
int buttonID;
long timeMS;
std::string codetoSEND;
};
int main()
{
padStruct s = {0,0,""}, *s2;
s2 = &s;
s.buttonID = 3; //or (*s2).buttonID = 3;
s.timeMS = 1200; //or (*s2).timeMS = 1200;
s.codetoSEND = "play song"; //or (*s2).codetoSEND = "play song";
std::cout << (*s2).buttonID << ',' << (*s2).timeMS << ',' << '"' << (*s2).codetoSEND << '"' << '\n';
}
这工作。
至于反对:
#include <iostream>
#include <vector>
#include <string>
struct padStruct
{
int buttonID;
long timeMS;
std::string codetoSEND;
};
int main()
{
padStruct *s = {0};
//padStruct *s = {0,0,""} //Error C2078 too many initializers
(*s).buttonID = 3; //or (*s2).buttonID = 3;
(*s).timeMS = 1200; //or (*s2).timeMS = 1200;
(*s).codetoSEND = "play song"; //or (*s2).codetoSEND = "play song";
std::cout << (*s).buttonID << ',' << (*s).timeMS << ',' << '"' << (*s).codetoSEND << '"' << '\n';
}
这不。
有人能简单的介绍一下
为什么不能初始化padStruct * S = {0,0,“”)在底部代码,而它的工作原理在上面,否则我得到一个错误C2078初始化程序太多 |
更重要的是,为什么我必须创建一个padStruct变量s,然后是padStruct * s2,然后必须将s2指向s?否则,我得到一个错误C2228:'.buttonID'的左边必须有class/struct/union。
非常混乱。也许至少解释第二个问题有点简单,所以它沉入。谢谢。
简短的回答是“因为C++不能这样工作”。重读C++中讨论指针是什么的章节,以及它们如何工作。 –
嗯..因为在顶级版本中你有一个类对象,而在最底层的代码中,你有一个指向类对象的指针。这两个完全不同的东西具有完全不同的语义。 – AnT