В 2-х образцах коды ниже (первый кодоблок ниже работ и 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' должен быть класс/структура/объединение.
Очень сбивает с толку. Может быть, объясните, по крайней мере, второй вопрос немного легко, чтобы он погрузился. Спасибо.
Короткий ответ «потому что C++ не работает таким образом». Перечитайте главу на своем C++, которая обсуждает, что такое указатели и как они работают. –
Ум .. Потому что в верхней версии у вас есть объект класса, тогда как в нижнем коде у вас есть * указатель * на объект класса. Это две совершенно разные вещи с совершенно другой семантикой. – AnT