Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
17 / 17 / 2
Регистрация: 29.10.2013
Сообщений: 269

Почему не компилируется код в котором описание класса стоит после main

21.02.2015, 14:04. Показов 1707. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Изучаю с++ по книге за 21 день.

Почему когда я пишу так, то не компилируется:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Human Man;
    Man.setName("Adam");
    Man.setAge(37);
 
    Human Woman;
    Woman.setName("Eva");
    Woman.setAge(35);
 
    Man.IntroduceSelf();
    Woman.IntroduceSelf();
 
    system("pause");
    return 0;
}
 
class Human
{
public:
    void setName(string HumanName)
    {
        Name = HumanName;
    }
    void setAge(int HumanAge)
    {
        Age = HumanAge;
    }
    void IntroduceSelf()
    {
        cout << "I am " + Name << " and am ";
        cout << Age << " years old" << endl;
    }
 
private:
    string Name;
    int Age;
};
А когда ставлю класс перед main, то всё ок:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Human
{
public:
    void setName(string HumanName)
    {
        Name = HumanName;
    }
    void setAge(int HumanAge)
    {
        Age = HumanAge;
    }
    void IntroduceSelf()
    {
        cout << "I am " + Name << " and am ";
        cout << Age << " years old" << endl;
    }
 
private:
    string Name;
    int Age;
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Human Man;
    Man.setName("Adam");
    Man.setAge(37);
 
    Human Woman;
    Woman.setName("Eva");
    Woman.setAge(35);
 
    Man.IntroduceSelf();
    Woman.IntroduceSelf();
 
    system("pause"); // Только для тех, у кого MS Visual Studio
    return 0;
}
Я думал не важно где класс расоложен
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.02.2015, 14:04
Ответы с готовыми решениями:

Почему после конструктора первого класса стоит двоеточие и имя переменной, а не инициализация?
#include &lt;iostream&gt; template &lt;typename T&gt; class first { public: T value; first (T n) : value(n) {} virtual...

Пожалуйста объясните! Почему при замене названия функции с main на любое другое программа не компилируется?!
Я начинающий в C++ и мне не очень-то понятна тема функций. Возможно вопрос покажется глупым, но всё же прошу объяснить, если сможете. Вот...

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

6
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2015, 14:08
Цитата Сообщение от nublin1 Посмотреть сообщение
Я думал не важно где класс расоложен
Важно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
class Human
{
public:
    void setName(string HumanName);
    void setAge(int HumanAge);
    void IntroduceSelf();
 
private:
    string Name;
    int Age;
};
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Human Man;
    Man.setName("Adam");
    Man.setAge(37);
 
    Human Woman;
    Woman.setName("Eva");
    Woman.setAge(35);
 
    Man.IntroduceSelf();
    Woman.IntroduceSelf();
 
    system("pause");
    return 0;
}
 
    void Human::setName(string HumanName)
    {
        Name = HumanName;
    }
    void Human::setAge(int HumanAge)
    {
        Age = HumanAge;
    }
    void Human::IntroduceSelf()
    {
        cout << "I am " + Name << " and am ";
        cout << Age << " years old" << endl;
    }
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
21.02.2015, 14:08
Функция не важно, а вот класс важно
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
21.02.2015, 14:09
Цитата Сообщение от nublin1 Посмотреть сообщение
Изучаю с++ по книге за 21 день.
http://computerscienceforall.r... +21day.jpg

Добавлено через 27 секунд
Цитата Сообщение от newline Посмотреть сообщение
Функция не важно,
неужели?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
21.02.2015, 14:21
Такое правило:
Любые объявления могут использоваться только после того, как их увидит компилятор.
В случае, когда одно объявление ссылается на другое,
или, когда объявление находится в другом месте,
можно использовать предварительное объявление.
Например
C++
1
2
3
4
5
6
7
8
9
class A; // Предварительное объявление
class B
{
  A* pa;
};
class A
{
  B* pb;
}
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
21.02.2015, 14:29
Цитата Сообщение от nublin1 Посмотреть сообщение
Изучаю с++ по книге за 21 день.
а что в книге написано, что расположение описания и определение класса не важно?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.02.2015, 14:45
Цитата Сообщение от Supernatural Посмотреть сообщение
а что в книге написано, что расположение описания и определение класса не важно?
Это действительно не важно.

Не путайте "объявление" (forward declaration/declaration), которое необходимо компилятору,
что бы понять природу задействованных имен, с "определением" (definition) этих имен.

Компилятору нужны только объявления.
Определения могут находится где угодно, например - в отдельных файлах проекта.

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

При этом, компилятору по прежнему достаточно объявления шаблона,
что бы уже можно было с ним работать.

Определение можно вписать где нибудь в конце файла единицы трансляции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.02.2015, 14:45
Помогаю со студенческими работами здесь

Почему компилируется код?
#include &lt;stdio.h&gt; int main(void) { double d = 1.12; f(d); f(&quot;Hello&quot;); return 0; }

О специализации шаблона: почему код компилируется?
Добрый день. Вроде бы, по правилам специализации шаблонов, можно только уточнять поведение шаблонного класса, но нельзя изменять его...

[template] почему код не компилируется без конструктора
добрый вечер. вопрос поместил прямо в коде. http://rextester.com/AESO94403 #include &lt;iostream&gt; #include &lt;string&gt; ...

Почему указанный код не компилируется в Visual Studio?
#include &quot;pch.h&quot; #include &lt;iostream&gt; using namespace std; int j, x; main() { cin &gt;&gt; x; if (x &gt; 1) { j = x - 5; ...

Как работает данный код? И почему не компилируется?
Обьясните пожалуйста как работает данный код, и скажите почему он не компилируется? И есть ли способ считать числа еще быстрее? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru