Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
#1

раздельная компиляция - C++

15.01.2013, 19:42. Просмотров 2105. Ответов 9
Метки нет (Все метки)

Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией методов класса (.cpp), и функцию main. Как, корректно, выполнить эту программу чтобы не подключают в основную программу файл .cpp? IDE - Dev c++

сам класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//employ2.h
#ifndef EMPLOY2_H
#define EMPLOY2_H
 
class Employee {
public:
       Employee(const char *, const char *);
       ~Employee();
       const char *getFirstName() const;
       const char *getLastName() const;
       
       /*virtual float earnings() const=0;
       virtual void print() const =0;*/
       
       void Show();
 
private:
        char *firstName;
        char *lastName;
        
};
 
#endif
методы класса
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
//employ2.cpp
#include <iostream.h>
#include <string.h>
#include <assert.h>
#include "employ2.h"
 
Employee::Employee(const char *first, const char *last)
{
     firstName=new char[strlen(first)+1];
     assert(firstName!=0);
     
     strcpy(firstName, first);
     
     lastName=new char[strlen(last)+1];
     assert(lastName!=0);
     
     strcpy(lastName, last);
}
 
Employee::~Employee()
{
          delete [] firstName;
          delete [] lastName;
}
 
const char *Employee::getFirstName() const
{
      return firstName;
}
 
const char *Employee::getLastName() const
{
      return lastName;
}
 
void Employee::Show()
{
     cout<<firstName<<endl<<lastName;
 }
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream.h>
#include "employ2.h"
//#include "employ.cpp"
 
int main()
{
    Employee A("a","a");
    A.Show();
    
    system("pause>0");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2013, 19:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос раздельная компиляция (C++):

Раздельная компиляция - C++
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот какие: 1) Если у меня есть класс,...

Раздельная компиляция - C++
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не сумел разобраться. У меня в проекте такие файлы: ...

Раздельная компиляция - C++
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где main 2 файл: содержит некоторые функции Также есть...

Раздельная компиляция файлов - C++
Если класс определен в раздельных файлах и изменения сделаны в части main программы, кот использует класс - какой файл необходимо...

Шаблоны и раздельная компиляция - C++
Здравствуйте! Если просто я пишу класс, например: class Test { private: int *pm; ... public: bool inc();

Раздельная компиляция и шаблоны - C++
Есть 3 файла с кодом: 1) foo.hpp template&lt;typename T&gt; class foo { public: T bar; foo(); ~foo(); };

9
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
15.01.2013, 19:50 #2
Хм, да всё вроде должно работать, если я что-то не пропустил. Какую ошибку выдает?
p.s Не надо инклюдить cpp-файлы, совсем.
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
15.01.2013, 19:58  [ТС] #3
В том-то и дело, что не работает!
[Linker error] undefined reference to `Employee::Employee(char const*, char const*)'
[Linker error] undefined reference to `Employee::Show()'
[Linker error] undefined reference to `Employee::~Employee()'
[Linker error] undefined reference to `Employee::~Employee()'
32:2 C:\Users\A4F7~1\AppData\Local\Temp\ccuObaaa.o(.text+0x177) ld returned 1 exit status
0
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
15.01.2013, 20:29 #4
tokar2, employ2.h точно находится в папке с проектом?.. Если да, то я не знаю тогда D:
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
15.01.2013, 20:34  [ТС] #5
Точно! И почему-то не работает! Работает только когда подключаю .cpp файл!
0
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
15.01.2013, 20:44 #6
у вас файл employ2.cpp должен быть подключен к проекту, в настройках проекта поищите. Если через командную строку компилировать, все нормально)
0
Kuzia domovenok
1960 / 1813 / 143
Регистрация: 25.03.2012
Сообщений: 6,288
Записей в блоге: 1
15.01.2013, 20:44 #7
так а ты в проект все эти файлы добавил?
0
tokar2
25 / 25 / 1
Регистрация: 09.11.2012
Сообщений: 229
15.01.2013, 21:09  [ТС] #8
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
так а ты в проект все эти файлы добавил?
Под этим, вы что имеете в виду?)

Добавлено через 1 минуту
Как этот файл в проект добавить?
0
FreeMinder
36 / 36 / 2
Регистрация: 29.08.2012
Сообщений: 59
15.01.2013, 21:17 #9
MS Visual Studio 2012 все отлично компилится
employ2.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string.h>
#include <assert.h>
using namespace std;
 
class Employee
{
public:
       Employee(const char *, const char *);
       ~Employee();
       const char *getFirstName() const;
       const char *getLastName() const;
       
       /*virtual float earnings() const=0;
       virtual void print() const =0;*/
       
       void Show();
 
private:
        char *firstName;
        char *lastName;        
};


employ2.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
#include"employ2.h"
 
Employee::Employee(const char *first, const char *last)
{
     firstName=new char[strlen(first)+1];
     assert(firstName!=0);
     
     strcpy(firstName, first);
     
     lastName=new char[strlen(last)+1];
     assert(lastName!=0);
     
     strcpy(lastName, last);
}
 
Employee::~Employee()
{
          delete [] firstName;
          delete [] lastName;
}
 
const char *Employee::getFirstName() const
{
      return firstName;
}
 
const char *Employee::getLastName() const
{
      return lastName;
}
 
void Employee::Show()
{
     cout<<firstName<<endl<<lastName;
}


main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
#include "employ2.h"
 
int main()
{
    Employee A("a","a");
    A.Show();
    
    system("pause>0");
    return 0;
}
0
Kuzia domovenok
1960 / 1813 / 143
Регистрация: 25.03.2012
Сообщений: 6,288
Записей в блоге: 1
15.01.2013, 21:35 #10
http://brunoprog64.blogsome.com/images/devc.png
Видишь слева список? В нём должны быть твои срр и н файлы соответственно
0
Миниатюры
раздельная компиляция  
15.01.2013, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2013, 21:35
Привет! Вот еще темы с ответами:

Раздельная компиляция ошибка LNK2019 - C++
Создал Header file #ifndef prata_9_1_H_ #define prata_9_1_H_ struct XY { int i_x; // distance from origin int i_y; // direction...

Раздельная компиляция ( Code blocks) - C++
версия 16.01 при вызове функции из другого файла, стал писать, что я не указал прототип функции и &quot;ld returned 1 exit status&quot;. хотя делал...

Создание классов в С++. Раздельная компиляция - C++
При создании класса C++ в VS создается два файла, &quot;&lt;имя_класса&gt;.h&quot; и &quot;&lt;имя_класса&gt;.cpp&quot;, зачем они ? В каком сам класс писать? Простите за...

Раздельная компиляция шаблонов классов - C++
При разделении шаблона класса на .h и .cpp линковщик ругается. Неужели в C++17 ещё не пофиксили это недоразумение и придётся писать всё в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru