8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Свой класс в С++29.03.2012, 16:05. Показов 3645. Ответов 22
Метки нет (Все метки)
Пытаюсь сделать класс массива точнее переписать код из учебника, но так как код приводится не целый а кусками то что в данный момент разбирается с трудом понимаю куда что вписывать и в конце написано создайте заголовочный файл и файл .cpp
Сохранил эти файлы создаю проект подключаю свой заголовочный файл и дальше ошибки. Вот что у меня получилось: Заголовочный файл:
Добавлено через 5 часов 12 минут В общем попробовал все запихнуть все в один файл чтобы проверить какие методы класса работают какие нет, вот что получилось:
Все действия работоспособны, все что ожидал получил! Вопрос остался: Как вынести класс в отдельный файл???
0
|
29.03.2012, 16:05 | |
Ответы с готовыми решениями:
22
Свой класс string Свой класс String Создать свой класс свой класс string |
157 / 157 / 27
Регистрация: 29.03.2012
Сообщений: 418
|
||||||
29.03.2012, 16:20 | 2 | |||||
Вставляешь объявление класса в один *.h (например IntArray.h),
определение конструкторов и функций в файл *.cpp (IntArray.cpp), подключаешь в этом файле свой заголовок #include "IntArray.h". И в главном файле подключаешь этот заголовок. И еще, нужно в начале IntArray.h прописать директивы
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|
29.03.2012, 16:47 [ТС] | 3 |
Сделал все как написали, но у меня теперь вот эти ошибки! Как я понимаю не может найти объявления перечисленных функций?! Что делать? Положил все в одну папку (и даже в debug кинул) он не может их найти..
[ILINK32 Error] Error: Unresolved external 'IntArray::IntArray(int *, int)' referenced from D:\RAD STUDIO\PROJECTS\INTARRAY2\DEBUG\FILE1.OBJ [ILINK32 Error] Error: Unresolved external 'IntArray::operator [](int)' referenced from D:\RAD STUDIO\PROJECTS\INTARRAY2\DEBUG\FILE1.OBJ [ILINK32 Error] Error: Unresolved external 'IntArray::IntArray(IntArray&)' referenced from D:\RAD STUDIO\PROJECTS\INTARRAY2\DEBUG\FILE1.OBJ [ILINK32 Error] Error: Unresolved external 'IntArray::IntArray(int)' referenced from D:\RAD STUDIO\PROJECTS\INTARRAY2\DEBUG\FILE1.OBJ [ILINK32 Error] Error: Unable to perform link
0
|
157 / 157 / 27
Регистрация: 29.03.2012
Сообщений: 418
|
|
29.03.2012, 18:40 | 4 |
Файлы должны лежать в одном каталоге.
И я не знаю как и чем вы собираете программу. У меня она нормально заработала.
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|
30.03.2012, 11:40 [ТС] | 5 |
У меня стоит Embercadero RAD Studio 2010
Добавлено через 15 часов 45 минут В общем я пошевелил мозгами и надумал несколько решений проблемы. Проблема: - Если мы в файле приложения (unit1.cpp) подключаем заголовочный файл (IntArray.h), то в unit1.cpp добавляется содержимое IntArray.h. - Все методы и конструкторы при этом у нас определены в файле IntArray.cpp. - В IntArray.cpp у нас присутствует строка #include "IntArray.h". Следовательно при компиляции файл IntArray.cpp содержит в себе текст файла IntArray.h, но ни как не наоборот. - Но как сказано в первом пункте мы подключили IntArray.h (файл, который не знает где ему искать реализацию конструкторов и методов, а следовательно не будет и знать приложение) Решение: 1) В приложении (unit1.cpp) надо подключать не .h файл, а .cpp; 2) Оставить подключение .h, но в этом случае убрать сточку #include "IntArray.h" из IntArray.cpp и добавить наоборот в файл IntArray.h строку #include "IntArray.cpp"; 3) Ну или не вообще поместить и описание класса и реализацию методов, конструкторов, деструкторов в один файл .h или .cpp и подключать его к проекту. P.S. Не знаю может это какие особенности компилятора или еще чего, но лично я следуя таким рассуждениям смог все наконец-то подключить. Не смею утверждать, что то как я делал первоначально не будет ни где работать (пост сверху утверждает, что все должно работать).
0
|
601 / 569 / 104
Регистрация: 07.11.2010
Сообщений: 2,004
|
|
30.03.2012, 11:52 | 6 |
что за бред? откройте и почитайте умную книжку, страуструпа к примеру
описание класса и вспомогательных функций в .h файл реализацию вышенаписанного в .cpp файл, к которому подключаете этот .h файл в главном файле программы просто подключаете .h файл с классом
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
||||||||||||||||
30.03.2012, 12:35 [ТС] | 7 | |||||||||||||||
ладно объясните вы как сделать если у меня есть IntArray.h - описание класса, IntArray.cpp - реализация функций, Unit1.cpp - программа в которой буду использовать..
0
|
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
|
||||||||||||||||
30.03.2012, 12:43 | 8 | |||||||||||||||
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|
30.03.2012, 12:44 [ТС] | 9 |
Nekto, Но это не работает!))) Можно конечно остаться с неработающим приложением и размышлять о смысле жизни!)))
0
|
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
|
|
30.03.2012, 12:46 | 10 |
У меня прекрасно работает
#ifndef , #define и #endif прописал в заголовочных файлах?
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|||||||||||
30.03.2012, 12:48 [ТС] | 11 | ||||||||||
Файл IntArray.h.. только что попробовал переделать
0
|
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
|
|||||||||||
30.03.2012, 12:49 | 12 | ||||||||||
main.cpp
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|
30.03.2012, 12:52 [ТС] | 13 |
На чем вы компилируете приложение?
0
|
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
|
||||||||||||||||
30.03.2012, 13:02 | 14 | |||||||||||||||
Unit1.cpp
Код
array1 size: 50 array2 size: 10 array3 size: 10 array4 size: 10 Press any key to continue . . . Embarcadero RAD Studio XE2
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|
30.03.2012, 13:07 [ТС] | 15 |
У меня 2010 и на нем это не пашет.. я бы рад да не работает
Добавлено через 38 секунд установлю XE2 посмотрю тогда, если все нормально заработает перейду на него
0
|
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
|
|
30.03.2012, 13:12 | 16 |
Я не думаю, что проблема в IDE... С моим последним кодом тоже не компилится? Какую именно ошибку выдаёт? Копи-пейстни сюда
Добавлено через 3 минуты Тыкнул эти же файлы в Microsoft Visual C++ 2010 Express, скомпилилось, работает.
0
|
denys_l
|
30.03.2012, 13:23
#17
|
Не по теме: Andersen1313, скажи, пожалуйста, что за учебник
0
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|
30.03.2012, 16:52 [ТС] | 18 |
Пересоздал проект. скопировал ваши коды, все тоже самое. Вот ошибки:
Может какие настройки в компиляторе нужны??? Добавлено через 47 минут Nekto, У вас нет ни каких соображений?! меня это уже напрягает сильно, вроде придумал как скомпилировать, но в то же время говорят что это неправильно и книжки умные посылают читать. P.S. так то принципиально нет большой разницы где и как я буду хранить и подключать файлы, главное чтобы в последующих программах мне было достаточно подключить заголовочный файл и все! Так что все равно все компилируется в один экзешник и по нему не догадаешься как и какие были сделаны заголовочные файлы
0
|
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
|
|
30.03.2012, 16:57 | 19 |
Не знаю даже в чем может быть проблема. У меня все настройки дефолтные. Ты консольное приложение создаёшь? Вот рарнул с RAD Studio
IntArray.rar
1
|
8 / 8 / 1
Регистрация: 18.10.2010
Сообщений: 120
|
|
30.03.2012, 17:08 [ТС] | 20 |
Nekto, Да консольное
Добавлено через 8 минут Nekto, У меня заработало моё... И я нашел отличие.. Наверное это будет смешно, но я то преследовал такую цель поэтому не стал этого делать! У вас файл IntArray.cpp добавлен к проекту))) А я не добавлял.. Сейчас объясню почему: я изначально хотел чтобы можно было не добавляя к проекту ни каких файлов просто подключив заголовочный файл использовать (в принципе я думал что так и должно быть) ну к примеру как подключаем стандартный файл #include <iostream> мы же его не добавляем к проекту. Наверное от сюда вытекает, что мне надо разобраться с вопросом почему стандартные можно только инклудом подключить и можно ли как то так же делать со своими файлами??? Добавлено через 1 минуту Как я понял мне обязательно надо будет добавлять к проекту свои файлы??? и без добавления можно подключать только стандартные?
0
|
30.03.2012, 17:08 | |
30.03.2012, 17:08 | |
Помогаю со студенческими работами здесь
20
Строки свой класс Свой контейнерный класс Создать свой класс Динамическая память, свой класс Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |