Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/40: Рейтинг темы: голосов - 40, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 4

Заголовочные файлы - C++

10.11.2015, 13:00. Показов 7611. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые пользователи!

написал код программы в 3 файлах. При компилировании возникает следующая ошибка:
"...collect2.exe: error: Id returned 1 exit status"

В чем может быть причина?

Вот код программы:

файл "main.cpp"

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
#include <iostream>
#include <cmath>
#include "circle.h"
 
using namespace std;
 
int main()
{
        setlocale(LC_ALL, "rus");
    int radius,height;
    //int coordy;
    cout << "vvedite radius:";
    cin >> radius;
    cout << "vvedite vysotu:";
    cin >> height;
        circle F_object(radius);     // объект базового класса
    cout << "radius circle = ";
    F_object.show_value();
    F_object.show_square();
    cylinder S_object(radius);    // объект производного класса цилиндр
    S_object.set_h(height);    // объект производного класса цилиндр
    cout << "raduis cylinder = ";
    S_object.show_value();  // вызов метода базового класса
    S_object.show_square();
    cone C_object(radius);    // объект производного класса конус
    C_object.set_h(height);    // объект производного класса конус
    cout << "raduis cone = ";
    C_object.show_value();  // вызов метода базового класса
    C_object.show_square();
    S_object.Volume();        // умножаем square  на высоту
    cout << "volume cylinder= ";
    S_object.show_value();
    C_object.Volume();        // умножаем square  на высоту
    cout << "volume cone= ";
    C_object.show_value();
    
    cout << endl;
    return 0;
}
файл "circle.h":

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//"circle.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
 
class circle    // базовый класс окружность
{
protected:          // спецификатор доступа к элементу value, square
    float value,square,h,h1;
public:
    circle()
    {
        value = 0;
    }
 
    circle( int input );
   // {
   //     value = input;
//  square = M_PI*value;
   // }
 
    void show_value()
    {
        cout << " =" <<value<< endl;
    }
    void show_square()
    {
        cout << " square="<<square<< endl;
    }
 
};
 
class cylinder : public circle   // производный класс цилиндр
{
public:
    cylinder() : circle ()   // конструктор класса ЦИЛИНДР вызывает конструктор класса ОКРУЖНОСТЬ
    {}
 
    cylinder(int inputS) : circle (inputS)   // inputS передается в конструктор с параметром класса ОКРУЖНОСТЬ
    {}
 
    void set_h(int point_h)
    {
    h=point_h;
    }
 
    void Volume ()     {
        value = square*h;    
    }  
 
 
};
 
class cone : public circle   // производный класс конус
{
public:
    cone() : circle ()   // конструктор класса КОНУС вызывает конструктор класса ОКРУЖНОСТЬ
    {}
 
    cone(int inputS) : circle (inputS)   // inputS передается в конструктор с параметром класса ОКРУЖНОСТЬ
    {}
 
    void set_h(int point_h)
    {
    h=point_h;
    }
 
    void Volume ()     {
        value = (square*h)/3;    
    }  
 
};
файл "circle.cpp"

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//"circle.cpp"
#include <iostream>
#include <cmath>
#include "circle.h"
 
using namespace std;
 
 
class circle    // базовый класс окружность
{
protected:          // спецификатор доступа к элементу value, square
    float value,square,h,h1;
public:
    circle()
    {
        value = 0;
    }
 
    circle( int input )
    {
        value = input;
    square = M_PI*value;
    }
 
    void show_value()
    {
        cout << " =" <<value<< endl;
    }
    void show_square()
    {
        cout << " square="<<square<< endl;
    }
 
};
 
class cylinder : public circle   // производный класс цилиндр
{
public:
    cylinder() : circle ()   // конструктор класса ЦИЛИНДР вызывает конструктор класса ОКРУЖНОСТЬ
    {}
 
    cylinder(int inputS) : circle (inputS)   // inputS передается в конструктор с параметром класса ОКРУЖНОСТЬ
    {}
 
    void set_h(int point_h)
    {
    h=point_h;
    }
 
    void Volume () // умножаем square  на высоту. Без спецификатора доступа protected эта функция не могла бы изменить значение value
    {
        value = square*h;    
    }  
 
 
};
 
class cone : public circle   // производный класс конус
{
public:
    cone() : circle ()   // конструктор класса КОНУС вызывает конструктор класса ОКРУЖНОСТЬ
    {}
 
    cone(int inputS) : circle (inputS)   // inputS передается в конструктор с параметром класса ОКРУЖНОСТЬ
    {}
 
    void set_h(int point_h)
    {
    h=point_h;
    }
 
    void Volume ()     {
        value = (square*h)/3;    
    }  
 
 
};
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.11.2015, 13:00
Ответы с готовыми решениями:

Заголовочные файлы .h, файлы исходного когда c/c++ и установление связи между ними
Всем добрый вечер!) Относительно недавно стал изучать c/c++, хочу полюбопытствовать ,так как появился вопрос. Почему при объявлении...

Работа в Visual Studio 2015 - как добавить файлы исходного кода и заголовочные файлы?
Приветствую всех! Столкнулся с тем, что решая задачи по книге Лафоре про графику, не смог добавить файлы .h и .cpp, скачав их с одной из...

заголовочные файлы
Здравствуйте, хотел поупражняться с заголовочными файлами, но столкнулся с ... код целиком работает прекрасно #include...

12
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
10.11.2015, 13:03
falkon73, Так ну во первых не когда в хедерах не пиши
C++
1
2
3
4
#include <iostream>
#include <cmath>
 
using namespace std;
они нужны для другого,
Второе какая среда разработки?

Добавлено через 32 секунды
Да и кстати зачем во всех подключаешь одни и теже библиотеки?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
10.11.2015, 13:04
Цитата Сообщение от falkon73 Посмотреть сообщение
"...collect2.exe: error: Id returned 1 exit status"
До этой ошибки должны быть другие. Это итоговое сообщения, мол, извини, хозяин, не смог. А конкретная ошибка (ошибки) сообщаются раньше. Скорее всего, какая-то функция не определена.
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
10.11.2015, 13:24
Байт, нет, там у него вообще черти что, пока не в учитывался в код, но на первый взгляд h файл идентичен cpp! Так и не понял сакрального смысла ну ладно! Мой компилятор вообще сказал что не соответствует 64х битной системе))) Первый раз вижу такую ошибку)

Добавлено через 6 минут
falkon73, Ну вот раскажи мне, зачем ты в main подключаешь h!? А с circle.cpp" что компилятор должен сделать? прочитать собрать и выкинуть?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
10.11.2015, 13:29
Цитата Сообщение от Mesteriis Посмотреть сообщение
Байт, нет, там у него вообще черти что
Это моя реакция на первые строчки поста. А код я просто не стал смотреть, ибо это не имело смысла
0
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 4
10.11.2015, 15:30  [ТС]
предыдущие ошибки:
main.cpp<text-ox84> undefined reference to "circle::circle < int> ' ......

/mingw/bin...lib/gcc/...ld.exe: bad reloc address 0x15 in section

Добавлено через 2 минуты
Цитата Сообщение от Mesteriis Посмотреть сообщение
Второе какая среда разработки?
среда разработки: обычный блокнот

Добавлено через 3 минуты
Цитата Сообщение от Mesteriis Посмотреть сообщение
Да и кстати зачем во всех подключаешь одни и теже библиотеки?
можно убрать лишние библиотеки... ошибка все равно остается...

Добавлено через 5 минут
Цитата Сообщение от Mesteriis Посмотреть сообщение
Ну вот раскажи мне, зачем ты в main подключаешь h!? А с circle.cpp" что компилятор должен сделать? прочитать собрать и выкинуть?
заголовочный файл использую для обращения к файлу circle.cpp...но если в circle.h написать только заголовки функций формата "circle( int input );", то методы из файла circle.cpp не реализовываются...возникает ошибка...
может есть пример с передачей данных(чисел, текста) в функции через заголовочный файл...
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
10.11.2015, 17:41
falkon73, Так ну давайте разбираться, зачем вообще нужны заготовочные файлы, по вещему?
Как именно с Вашей точки зрения работает детектива #include <>?

И что в этого куда переносится при компиляции!?

и так имеем файлы main.hpp foo.hpp и foo.cpp
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "foo.cpp"
 
using namespace std;
 
int main()
{
     foo("Привет Мир");
     return 0;
}
foo.cpp
C++
1
2
3
4
5
6
#include "foo.hpp"
 
void foo( const std::string& str)
{
     std::cout << str <<std::endl;
}
foo.hpp:
C++
1
void foo( const std::string& str) // какой то комент описывающий функцию
Вот в такой вариации и удобно и все работает, потому что декларирование происходит в хедере, описание в foo.cpp а вызов в main.cpp. И последующие разрабочики когда будут пользоватся вашими трудами не надо будет разбираться в работе вашей функции, а только посмотреть хедер и ваш комментарий! (При условие если все работает.)

Таким образом получаем итоговый файл при сборке следующего вида (он естественно в машином коде)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
void foo( const std::string& str) // какой то комент описывающий функцию -файл foo.hpp
                                             _
void foo( const std::string& str)             |
{                                             |
     std::cout << str <<std::endl;            | - файл foo.cpp
}                                             |
                                             _|
using namespace std;                         - остальное майн
 
int main()
{
     foo("Привет Мир");
     return 0;
}
А теперь по той же логике посмотрите что у вас происходит, не говоря что у вас в хедер не полный, точнее считайте его обычным cpp

Добавлено через 4 минуты
Ну по коду тогда вечером напишу, как до пк доберусь, де стоит среда

Добавлено через 1 минуту
Да и еще поделись тайной какой компилятор в твоем "блокноте" стоит))) и как работает)
0
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 4
11.11.2015, 22:01  [ТС]
Цитата Сообщение от Mesteriis Посмотреть сообщение
Да и еще поделись тайной какой компилятор в твоем "блокноте" стоит))) и как работает)
пишу код в обычном блокноте, компилятор через командную строку mingw...

написал код по примеру...
возникла следующая ошибка:

in file incuded from main.cpp:2:0:
foo.cpp:3:1:error expected initializer bofore 'void'
void foo< const std::string& str>

main.cpp: in function 'int main ()' :
main.cpp:9:17:error 'foo' was not declared in this scope
foo("Привет Мир");
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
11.11.2015, 22:08
falkon73, если рассматривать предыдущий код, то скорее всего ты позабыл, что компилировать надо два cpp, а не один.
Т.е. команда для компиляции будет такой:
Bash
1
g++ main.cpp circle.cpp -o program.exe
Добавлено через 2 минуты
falkon73, а нет. Проблема серьезнее.
Почему у тебя в circle.cpp повторяется содержимое circle.h?
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
11.11.2015, 22:10
DrOffset, Мы об этом с ним и говорили))))
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
11.11.2015, 22:31
Байт правильно говорит. Текст ошибки не полный. Это:
Цитата Сообщение от falkon73 Посмотреть сообщение
предыдущие ошибки:
main.cpp<text-ox84> undefined reference to "circle::circle < int> ' ......
- явно не все. Покажи всё то, что выдаёт компилятор, и мы найдём решение проблемы.
Скорее всего у тебя нет реализации метода.

Добавлено через 18 минут

Не по теме:

Цитата Сообщение от Mesteriis Посмотреть сообщение
нельзя так у меня аж носом кофе пошло!
)) извини если что, но в этом нет ничего особенного. Этим выражением я всего лишь обозначил проблему.

0
0 / 0 / 0
Регистрация: 09.11.2015
Сообщений: 4
20.11.2015, 00:06  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
falkon73, а нет. Проблема серьезнее.
Почему у тебя в circle.cpp повторяется содержимое circle.h?
поменял код программы,все работает...хотел уточнить правильность отнесения данных между файлами...

вот код:

файл main.cpp

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
#include <iostream>
#include <cmath>
#include "circle.h"
 
using namespace std;
 
 
int main()
{
        
    int radius,height;
 
    cout << "vvedite radius:";
    cin >> radius;
    cout << "vvedite vysotu:";
    cin >> height;
        
    //circle F(radius);     // объект базового класса
        //cout << "radius circle = ";
 
     circle F;
     F.res_sq(radius);
     F.show_value(radius);
     F.show_square();
 
    cout << endl;
    return 0;
}
файл circle.h

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
//circle.h 
 
#ifndef CIRCLE_H
#define CIRCLE_H
 
using namespace std;
 
class circle    // базовый класс окружность
{
private:          // спецификатор доступа к элементу value, square
    int value,square;
public:
    circle();
   
 
    void res_sq( int input );
 
    void show_value(int input);
   
    void show_square();
   
 
};
#endif
файл circle.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//circle.cpp
#include <iostream>
#include "circle.h"
#include <cmath>
 
circle::circle() {value = square = 0;}    
 
 
void circle::res_sq( int input )
   {
        
    square = M_PI*input;
   }
  
void circle::show_value(int input)
   {  value = input;
        cout << "radius =" <<value<< endl;
   }
void circle::show_square()
   {
       cout << " square="<<square<< endl;
   }
0
 Аватар для Mesteriis
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,637
20.11.2015, 00:17
falkon73, впринцепе верно, только в хедерах не когда не пиши using namespace лучше указать для каждого метода отдельно, а то потом можно нарваться на проблемы изза этого
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.11.2015, 00:17
Помогаю со студенческими работами здесь

Заголовочные файлы
Добрый день. Вот такой вопрос. Пишу на Борланде. Не пойму как писать, если классы помещать в свои файлы. Вот например,...

Заголовочные файлы *.h
Доброго времени суток! Как понят следующее: В заголовочных файлах, в целях более быстрой компиляции, для указателей на типы данных...

Заголовочные файлы
Здравствуйте ув. Пользователи, У меня такой вопрос: Есть ли хорошие книги по заголовочным файла как правильно ими пользоваться... Просто...

Заголовочные файлы
Всем добрый день! Пытался найти информацию по созданию заголовочных файлов, да не нашел. У меня есть здоровая шаблонная функция ...

заголовочные файлы
напишите пожалуйста,что делают заголов.файлы &lt;io.h&gt; и &lt;direct.h&gt; Добавлено через 8 минут и расшифруйте условие: ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru