Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
#1

При разбиении программы на *.cpp, *.h - файлы программа не компилируется. - C++

08.10.2010, 23:17. Просмотров 2775. Ответов 16
Метки нет (Все метки)

Если собрать всё в zadacha.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
//--------------------- Person.h -----------------------------
class Person
{
private:
    char Firstname [20];
    char Surname [20];
    char Patrname [20];
public:
    //Функции записи (сеттеры)
    void setFirstname (const char *s);
    void setSurname (const char *s);
    void setPatrname (const char *s);
    //Функции чтения (геттеры)
    char * getFirstname ();
    char * getSurname ();
    char * getPatrname ();
    //Конструкторы: по умолчанию, с параметрами, копирующий соответственно - и деструктор
    Person ();
    Person (char Fn[], char Sn[], char Pn[]);
    Person (const Person &obj);
    ~Person();
};
 
//--------------------------- Person.cpp ----------------------------
#include "stdafx.h"
#include <conio.h>
#include <cstring>  
#include "Person.h"   
 
Person::Person() {Firstname[0] = Surname [0] = Patrname [0] = '\x00';}
 
Person::Person(char Fn[], char Sn[], char Pn[])
    {
        setFirstname(Fn);
        setSurname(Sn);
                      setPatrname(Pn);
    }
 
Person::Person(const Person &obj)
    {
        setFirstname(obj.Firstname);
        setSurname(obj.Surname);
        setPatrname(obj.Patrname);
    }
 
Person::~Person() {printf("\nDelete object...\n");}
 
void Person::setFirstname (const char *s) {strcpy_s(Firstname, sizeof(Firstname), s);}
void Person::setSurname (const char *s) {strcpy_s(Surname, sizeof(Surname), s);}
void Person::setPatrname (const char *s) {strcpy_s(Patrname, sizeof(Patrname), s);}
 
char * Person::getFirstname () {return Firstname;}
char * Person::getSurname () {return Surname;}
char * Person::getPatrname () {return Patrname;}
 
//-------------------------- zadacha.cpp -------------------------------------
#include "stdafx.h"
#include "Person.h"
#include <conio.h>
#include <string.h>
#include <iostream>
 
int _tmain(int argc, _TCHAR* argv[])
{
    Person p1;
    Person *pp2 = new Person();
    Person *pp3 = new Person("A", "K", "S");
    Person *pp4 = new Person(*pp3);
    int size1 = sizeof (p1);
    int size2 = sizeof (*pp2);
    printf("Memory for object p1: %d\nMemory for object pp2: %d",size1, size2);
    delete pp2;
    std::cout << "Object has been deletet."<< std::endl;
    getch();
    return 0;
}
Сообщение компилятора:
1>------ Build started: Project: oop_zdat, Configuration: Debug Win32 ------
1>Linking...
1>oop_zdat.obj : error LNK2019: unresolved external symbol "public: __thiscall Person::~Person(void)" (??1Person@@QAE@XZ) referenced in function _wmain
1>oop_zdat.obj : error LNK2019: unresolved external symbol "public: __thiscall Person::Person(class Person const &)" (??0Person@@QAE@ABV0@@Z) referenced in function _wmain
1>oop_zdat.obj : error LNK2019: unresolved external symbol "public: __thiscall Person::Person(char * const,char * const,char * const)" (??0Person@@QAE@QAD00@Z) referenced in function _wmain
1>oop_zdat.obj : error LNK2019: unresolved external symbol "public: __thiscall Person::Person(void)" (??0Person@@QAE@XZ) referenced in function _wmain
1>D:\CPP\oop_zdat\Debug\oop_zdat.exe : fatal error LNK1120: 4 unresolved externals
1>Build log was saved at "file://d:\CPP\oop_zdat\oop_zdat\Debug\BuildLog.htm"
1>oop_zdat - 5 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2010, 23:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос При разбиении программы на *.cpp, *.h - файлы программа не компилируется. (C++):

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

Не компилируется программа при попытке вызова функции из Unit1 в Unit2
Добрый день. Пишу программу, которая должна считывать данные с АЦП и...

Ошибка при разбиении программы на файлы(модули)
Исходный код: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;fstream&gt;...

При разбиении на модули программа перестаёт работать
Программа отлично работает, если пользовательские функции находятся в том же...

В формате .cpp код компилируется, а в .c не компилируется
1).Подскажите почему в формате .cpp код компилируется, а в .c не компилируется ...

Файлы компилируется, но программа не запускается
Сразу хочу успокоить, что ошибка не в том, что в проект не были включены...

16
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
08.10.2010, 23:31 #2
У меня все работает. Если подключить в Peson.cpp - #include <cstdio> то все совершенно нормально работает. Почему не работает у вас - не знаю.
1
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
08.10.2010, 23:44  [ТС] #3
Всё равно таже ошибка .... ((
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
08.10.2010, 23:50 #4
kowandser, Компилятор то какой?
1
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
09.10.2010, 00:00  [ТС] #5
Visual Studio 2008
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.10.2010, 00:04 #6
kowandser, Зачем писать tmain в консольных программах не могу понять... Попробуйте так. Создайте новый ПУСТОЙ проект. Без предкомпилированного заголовка. И вставьте туда весь свой код по разным файлам. + вместо int tmain(int argc, TCHAR_* argv)
Напишите просто
int main()
1
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
09.10.2010, 00:05  [ТС] #7
tmain прописывается само после создания проекта Win32 Console Application
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.10.2010, 00:08 #8
kowandser, Я же говорю. Создайте ПУСТОЙ проект. Есть там когда создаете сам проект. Не сразу Финиш, а Сначала далее, там есть галочка пустой проект. Поставьте ее. И попробуйте.
0
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
09.10.2010, 00:09  [ТС] #9
main() же не меняет ситуацию... если поменять с tmain()
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.10.2010, 00:14 #10
kowandser, Я не уверен что не меняет ситуацию предкомпилированный заголовок. #include "stdafx.h"
Не уверен потому как, в 2005 студии ваш код спокойно скомпилировался. И запустился. И отработал.

Добавлено через 3 минуты
Кстати. Кроме как в виндоусе и в MSVS ваш код нигде не отработает. strcpy_s - таки Мелкомягкая придумка
1
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
09.10.2010, 00:18  [ТС] #11
Сделал. Ошибка вот такая:
1>------ Build started: Project: oopz, Configuration: Debug Win32 ------
1>Embedding manifest...
1>.\Debug\oopz.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Build log was saved at "file://d:\CPP\oopz\oopz\Debug\BuildLog.htm"
1>oopz - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.10.2010, 00:18 #12
kowandser, По пунктам распишите, что вы делали.
1
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
09.10.2010, 00:29  [ТС] #13
File->New Project->Win32 Console Application. В новом окошке Next->Empty Project.

Потом File->New File->C++ File(*.cpp)
Туда закидываю main():

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "Person.h"
#include <conio.h>
#include <string.h>
#include <iostream>
 
int main()
{
    Person p1;
    Person *pp2 = new Person();
    Person *pp3 = new Person("Andrei", "Kavaliou", "Sergeevich");
    Person *pp4 = new Person(*pp3);
    int size1 = sizeof (p1);
    int size2 = sizeof (*pp2);
    printf("Memory for object p1: %d\nMemory for object pp2: %d",size1, size2);
    delete pp2;
    std::cout << "Object has been deletet."<< std::endl;
    getch();
    return 0;
}
Копирую Person.h и Person.cpp в папку в проектом.
Директиву #include "stdafx.h" везде убрал и компилирую.
Компилятор ругается так:
---------------------------------------------------------------------------------------------
1>------ Build started: Project: oopz, Configuration: Debug Win32 ------
1>Embedding manifest...
1>.\Debug\oopz.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. 5 C405BAO =09B8 C:070==K9 D09;.
1>Build log was saved at "file://d:\CPP\oopz\oopz\Debug\BuildLog.htm"
1>oopz - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.10.2010, 00:59 #14
kowandser, В проект добавьте эти оба файла. А не только в папке.
Add->Existing item.
Оба файла добавьте в сам проект. О результатах напишите
1
kowandser
0 / 0 / 3
Регистрация: 01.10.2010
Сообщений: 50
09.10.2010, 01:08  [ТС] #15
Спасибо, Lavroff, очень тебе благодарен. Только начинаю программировать на C++, поэтому такие моменты мне не знакомы. Ещё раз спасибо!!!!
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
09.10.2010, 01:15 #16
kowandser, Не за что) Рад, что смог помочь
1
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
09.10.2010, 17:24 #17
kowandser, а вы вручную прописывали эту строчку или через добавить к проекту(не помню как точно формулируется) ?
C++
1
#include "Person.h"
Добавлено через 39 секунд
ой, не заметил конец беседы
1
09.10.2010, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2010, 17:24
Привет! Вот еще темы с решениями:

Некомпилируемый код компилируется в dev-cpp 4.9.9.2
Доброго времени суток. Вот код #include &lt;iostream&gt; int main() { int...

Не компилируется .cpp файл в visual studio
Не могу скомпилировать .cpp файл в visual studio c++ express 2010. В Visual...

Программа компилируется в Borland 6.0 но не компилируется в Visual Studio 2008
Ета програма компилируетса в борланде 6.0 но не компилируетса в Visualstudio...

Не компилируется проект, возникают ошибки связанные с файлами .cpp
Создаю класс, но IDE (VS 2015 Community) не хочет собирать проект, пишет...


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

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

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