在下面的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