Member 14935473 Ответов: 2

Правильно ли я использовал здесь "iostream"? Начальное изучение вопроса говорит " Да " но это все равно не компилируется


вначале наш учитель привел это в качестве примера.
нам сказали, чтобы проверить, чтобы увидеть, если он работает,
интернет был медленным, поэтому мы закончили урок, но я продолжал работать над ним
#include <iostream>
#include <stdio.h>

using namespace std;

class structure{

   typedef struct{
        char firstname[20];
        char lastname[20];
        int  age;
    } student_info;

    int main (){
        student_info students[0];

        students[0] = { "Wang", "Dong", 18};
        Students[1] = { "wong", "Dang",19};

        Cout<<"The record of the first student contains"<<student[0].irstname<<student[0].lastname<<student[0].age;

    Return 0;
}};

при первой попытке он потерпел неудачу и выдал это сообщение об ошибке:
"
data structures and algorithms\test\main.cpp|9|error: expected unqualified-id before '[' token|
data structures and algorithms\test\main.cpp|10|error: expected unqualified-id before '[' token|"

исправлено, как это выглядит выше
затем попробовал еще раз и это появилось
"||=== Сборка: отладка в тест (составитель: ГНУ GCC компилятором) ===|
структуры данных и algorithms\test\main.cpp||В функции-члене 'int structure::main()':|
структуры данных и алгоритмы тестирования\\главная.КПФ|18|предупреждение: расширенные списки инициализаторов доступна только с-std=с++11 или-std=GNU с++11|
структуры данных и алгоритмы тестирования\\главная.КПФ|18|предупреждение: расширенные списки инициализаторов доступна только с-std=с++11 или-std=GNU с++11|
структуры данных и алгоритмы\test\main.cpp|18|error: no match for 'operator=' (типы операндов - 'structure::student_info' и '<brace-enclosed initializer="" list="">')|
структуры данных и алгоритмы тестирования\\главная.ФКП|13|Примечание: кандидат: структура::student_info&амп; структура::student_info::оператор=(структура слова const::student_info&ампер;)|
структуры данных и алгоритмы тестирования\\главная.ФКП|13|примечание: не известен преобразования параметра 1 в в '<дубль-заключенный инициализатор="" список=""&ГТ;' на 'структура слова const::student_info&амп;'|
структуры данных и алгоритмы\test\main.cpp|19|error: 'Students' не был объявлен в этой области|
структуры данных и алгоритмы тестирования\\главная.КПП|19|предупреждение: расширенные списки инициализаторов доступна только с-std=с++11 или-std=GNU с++11|
структуры данных и алгоритмы\test\main.cpp|21|error: 'Cout' не был объявлен в этой области|
структуры данных и алгоритмы\test\main.cpp|21|error: 'student' не был объявлен в этой области|
структуры данных и алгоритмы\test\main.cpp|23|error: 'Return' не был объявлен в этой области|
структуры данных и алгоритмы\test\main.cpp|24|warning: no return statement in function returning non-void [-Wret-type]|
||=== Сборка не удалась: Ошибка 5(З), 4 предупреждения(з) (0 минут(ы) 0 секунд(ы)) ===|
"
я думаю, что это исходит от "iostream", я не знаю, как и почему?

Что я уже пробовал:

я новичок,поэтому не знаю, для чего нужна эта коробка, но это необходимо...

KarstenK

в вашем коде есть несколько опечаток. Это не нравится компилятору.

2 Ответов

Рейтинг:
2

CPallini

Ваш код выглядит как смесь C и C++ язык программы.
Как правило, C программист пишет:

#include <stdio.h>
  
typedef struct
{
  char firstname[20];
  char lastname[20];
  int  age;
} student_info;

int main ()
{
  student_info student[] = {{ "Wang", "Dong", 18},{ "wong", "Dang",19}};

  printf("The record of the first student contains %s, %s, %d\n", student[0].firstname, student[0].lastname, student[0].age);

 return 0;

}

а C++ программист пишет:
#include <iostream>  
using namespace std;

class student_info
{
  friend ostream & operator <<(ostream & os, const student_info & si);

  string firstname, lastname;
  int age;
public:
  student_info(string firstname, string lastname, int age): firstname(firstname), lastname(lastname), age(age){}
};

ostream & operator <<(ostream & os, const student_info & si)
{
  os << si.firstname << ", " << si.lastname << ", " << si.age;
  return os;
}

int main ()
{
  student_info student [] =  { student_info( "Wang", "Dong", 18), student_info("wong", "Dang",19) };
  cout<<"The record of the first student contains " << student[0] << endl;
}


Обратите внимание, как C и C++ являются чувствительный к регистру, пока return это ключевое слово, Возвращать это не ключевое слово.


Рейтинг:
1

Stefan_Lang

Во-первых, iostream-это наименьшая из ваших проблем. Далеко!

Я не совсем понимаю, чего хотел добиться ваш учитель с помощью этой задачи. Если ваши навыки программирования недостаточно развиты, чтобы сразу же обнаружить и исправить по крайней мере дюжину ошибок до беспокоя компилятор с этим мусором, тогда ваши шансы правильно интерпретировать сообщения компилятора и соответствующим образом исправить проблемы равны нулю. Самое главное, что код настолько неправильный, что мало шансов, что компилятор выдаст полезные сообщения об ошибках (но тем не менее он все равно делает замечательную работу)

Вот несколько советов по исправлению такого кода:

1. рассмотрим общую схему программы: обычно у вас есть некоторые операторы include и некоторые объявления, возможно, typedefs и определения составных типов; затем у вас могут быть дополнительные функции, и наконец, у вас есть функция main. В вашем коде все это смешано в бессмысленном определении класса: самое главное, что main() содержится в этом определении класса, которое не имеет никакого смысла, если вы не программируете Java!

2. Этот класс (названный "структура") нигде не используется. Ну, этого не может быть, потому что для этого потребуется существование глобальной функции main (), которая использует этот класс, или функции, вызываемой внутри main (), которая это делает. Но даже когда вы перемещаете эту функцию из класса, она не использует "структуру" - поэтому все определение класса является бессмыслицей. Избавиться от этого класса легко: просто удалите первую строку и закрывающую скобку.

3. Как указывал Карло выше, вы должны четко представлять, какой язык используете и какой код хотите получить. Либо вы идете на C, используйте студию.H, чтобы печатать сообщения и использовать старого типа char массивы и структуры, или использовать iostream выводить сообщения с помощью std::соиь, включать <строка&ГТ; а также, и использовать std::string, а не char массивы. Нет смысла смешивать языки и стили, даже если он компилируется.

4. После того, как вы убрали класс и решил на изучаемом языке, вы можете начать использовать компилятор. Убедитесь, что вы указываете ему, какой язык использовать, чтобы он выдавал предупреждения или ошибки, когда ваш код не соответствует выбранному языку.

5. With the compiler messages, the best approach is to just look at the first warning or error, and try to understand what the compiler is telling you. It is a good idea not to ignore warnings, because they often indicate that your code may not be doing what you intended, even though it is syntactically correct. You should ignore warnings only if you fully understand what is causing it, and have confirmed that this doesn't affect the functionality of your code (and even then it would be better to fix it, if you know how). Once you changed the code to address the very first compiler messages, it might be a good idea to simply run the compiler again: sometimes, fixing a single line in your code can eliminate multiple compiler messages! Keep doing this, until all warning and error messages are gone, or at the very least, the code compiles

6. Если вы не можете самостоятельно выяснить, как исправить конкретное сообщение, то вы можете проверить онлайн-ресурсы, такие как этот веб-сайт: здесь вы можете показать код, который создает сообщение, и текст сообщения. Обычно этого достаточно, чтобы выяснить, что не так, и объяснить, что вам нужно сделать.