#c
#c
Вопрос:
#include <iostream>
using namespace std;
int main()
{
struct calcvaribles;
{
int a;
int b;
int sum;
};
struct introstructions;
{
char ab[35];
string ac;
};
introstructions outline;
outline.ab = "welcome to my calculator program!";
outline.ac = "please enter any [One] number in the
terminal";
return 0;
}
Сообщение об ошибке:
структура aggregate main()::introstructions имела неполный тип и не может быть определена
Схема интрострукций.
Комментарии:
1. Я думаю, вы имеете в виду C для тега, а не CSS
2. Вы завершаете точку с запятой после ‘struct introstructions;’ неправильно
3. Ну, я думаю, мне следует быть более внимательным к моим собственным заметкам, лол.
Ответ №1:
- Почему вы объявляете
struct
s внутриmain
? Просто переместите их в глобальную область видимости. - Вы не можете назначить строковый литерал
char
массиву, как вы делаете здесь:outline.ab = "welcome to my calculator program!";
. Вместо этого используйтеconst char*
или, что еще лучше, как вы показали нижеchar
объявления массива,std::string
, но не забудьте#include <string>
.
Проблема в вашем коде в том, что вы включаете ;
после struct
имени:
struct calcvaribles;
struct introstructions;
Должно сработать следующее:
#include <iostream>
#include <string>
using namespace std;
int main() {
struct calcvaribles {
int a;
int b;
int sum;
};
struct introstructions {
string ab;
string ac;
};
introstructions outline;
outline.ab = "welcome to my calculator program!";
outline.ac = "please enter any [One] number in the terminal";
return 0;
}
Комментарии:
1. Спасибо, чувак, ценю это.
Ответ №2:
В этой ситуации язык C вам не поможет, поскольку компилятор интерпретирует код совершенно иначе, чем вы ожидаете.
#include <iostream>
using namespace std;
int main()
{
struct calcvaribles;
Из-за точки с запятой в конце приведенной выше строки компилятор считывает это как:
Есть структура, которая называется calcvaribles
. На данный момент неясно, какие поля имеет структура, это должно быть определено в другом месте. В любом случае, имя структуры уже известно, и если вы объявите переменную типа указателя на эту структуру, это разрешено с no on.
{
Эта открывающая скобка означает:
Здесь начинается новая область видимости. Любая переменная, объявленная в этой области, будет доступна только до соответствующего }
.
int a;
int b;
int sum;
Вместо того, чтобы быть полями структуры (что вы намеревались), это объявления обычных переменных. Эти переменные ничего не делают, им не присвоены значения, и их значения вообще не читаются. В целом, эти три строки представляют собой большой блок «ничего не делать».
};
На этом область заканчивается. С этого момента переменных a
, b
и sum
больше нет.
Точка с запятой также бесполезна. Это пустое утверждение. Разрешено, но бесполезно.
struct introstructions;
{
char ab[35];
string ac;
};
introstructions outline;
outline.ab = "welcome to my calculator program!";
outline.ac = "please enter any [One] number in the
terminal";
return 0;
}
То же самое происходит с introstructions
типом.
Если бы вы написали struct
определения вне main
функции, компилятор выдал бы вам сообщение «синтаксическая ошибка». Возможно, вы сделали это первым, и чтобы исправить сообщение об ошибке, вы переместили все в основную функцию.
К сожалению, только из-за этих завершающих точек с запятой написанный вами код все еще компилируется, но означает что-то совершенно другое. Но для этого нет обходного пути.