ошибка: переменная имеет неполный тип ‘introstructions’, не может понять

#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 функции, компилятор выдал бы вам сообщение «синтаксическая ошибка». Возможно, вы сделали это первым, и чтобы исправить сообщение об ошибке, вы переместили все в основную функцию.

К сожалению, только из-за этих завершающих точек с запятой написанный вами код все еще компилируется, но означает что-то совершенно другое. Но для этого нет обходного пути.