Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 [Все]   Вниз
  Печать  
Автор Тема: Заголовочные файлы  (Прочитано 79885 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kasper
Гость
« : 13-03-2005 21:26 » 

Привет!

1. Имею собственно написанный заголовочный файл:
#ifndef TIME.H
#define TIME.H

class Time {
public:
   Time();
   void setTime(int, int, int);

   void printMilitary();
   void printStandart();

private:
   int hour;
   int minute;
   int second;
};
#endif

Пожалуйста, как включить его в прогу:
(думается мне, его нужно разместить где-нето, а где? Компилятор постоянно ссылается на LIB но, после помещения его туда ничего не происходит).

#include<iostream.h>
#include "time.h"

Time::Time() {hour = minute = second = 0;}

void Time::setTime(int h, int m, int s)
{
   hour = (h >= 0 && h < 24) ? h : 0;
   minute = (m >= 0 && m < 60) ? m : 0;
   second = (s >= 0 && s < 60) ? s : 0;
}

void Time::printMilitary()
{
   cout<<(hour < 10 ? "0" : "")<<hour<<":"
       <<(minute < 10 ? "0" : "")<<minute<<":"
       <<(second < 10 ? "0" : "")<<second;
}

void Time::printStandart()
{
   cout<<((hour == 0 || hour == 12) ? 12 : hour % 12)
       <<":"<<(minute < 10 ? "0" : "")<<minute
       <<":"<<(second < 10 ? "0" : "")<<second
       <<(hour < 12 ? " AM" : " PM");
}
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 13-03-2005 21:52 » 

Извини дорогой - но тебя понять трудно.
Для включения твоей пары файлов в любой из cpp файлов проргаммы надо всего-лишь добавить
#include "time.h" и все.
Просто time.h это стандартный фалй для API операций с временем.
Вот он и требует lib файл того.
Смени название.
Записан

А птичку нашу прошу не обижать!!!
kasper
Гость
« Ответ #2 : 13-03-2005 22:04 » 

Гром, что именно надо делать? какое название новое нужно дать?
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 13-03-2005 22:36 » 

Которое не будет соответствовать системному time.h
Записан

А птичку нашу прошу не обижать!!!
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 14-03-2005 06:14 » 

Наверное, компилятор ругает тебя за то, что не может найти тела методов класса Time.
Покажи вывод компилятора.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
kasper
Гость
« Ответ #5 : 14-03-2005 21:02 » 

Имею заголовочный файл с программой (см. выше)
На выходе он дает:

Linker Warning: No module definition file specified: using defauls
Linker Error: Undefined symbol_main in library file C:\BC\LIB\cwl.lib in module winmain

Понятно, что ошибка в моих действиях.
Как устранить?
Записан
kasper
Гость
« Ответ #6 : 14-03-2005 21:05 » 

В книге (Как программировать на С++. Дейтел.), сказано, что нужно посмотреть документацию на комп, там объяснение, как создавать заголовочные файлы и подключать в исходник
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 15-03-2005 05:22 » 

Цитата
... нужно посмотреть документацию на комп, там объяснение, как создавать заголовочные файлы и подключать в исходник
Ну, это явный перебор... Отлично
Вам же пытались уже сказать - давайте по порядку
1. Если ваш инклудник имеет имя time.h  - переименовать его
2. допустим назвать его mytime.h
3. включить в файл, где планируется использовать Ваш класс #include "mytime.h"
4. включить в проект *.срр файл с реализацией класса

Желательно привести версию того, на чем это собирается, и что конкретно...
А так можно только точно сказать что это Борланд, но какой, и что за приложение (проект) - консольное, или графическое, увы не ясно.
По поводу " Undefined symbol_main..." - сообщение наводит на мысль: а у Вас вообще main() функция описана где нибудь?
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 15-03-2005 09:16 » 

#include <time.h>
#include "time.h"
Два совершенно разных файла и между собой не конфликтуют.
Первый ищется по настройкам компилятора, второй - относительно директории, в которой находится компилируемый c или cpp файл.
« Последнее редактирование: 15-03-2005 09:23 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 15-03-2005 16:10 » 

Ну да, правильно... Просто я просмотрел (мимо) как он его инклудит, тем более в самом начале была фраза о попытке засунуть все это в LIB директорию
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #10 : 15-03-2005 20:11 » 

Честно сказать, я так и не понял, перемеиновывать файл или нет. RXL говорит, что это не мешает. Да я и сам пробовал переименовывать, но что то неполучается. Так как же довести первый файл до состояния включения, и как подготовить второй файл к тому, что бы в него можно было ввести заголовочный файл, еще: нужно ли его размещать кде-нибудь, или компилятор его сам размещает?
Записан
kasper
Гость
« Ответ #11 : 15-03-2005 20:11 » 

Да, забыл сказать, я пишу в среде Borland C++ 4.5
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 15-03-2005 21:46 » 

Linker Warning: No module definition file specified: using defauls
Linker Error: Undefined symbol_main in library file C:\BC\LIB\cwl.lib in module winmain
Судя по этим строкам компилятор вообще не ругается.
Ругается линкер.
Внимательно просмотри свои исходные файлы и найди тело функции main (или WinMain, ежели под винду приложение пишешь).
Если не найдешь такую функцию, то создай. И проблема будет решена.
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 16-03-2005 03:38 » 

А кто-нибудь гляньте как в <time.h> отдефайнено его дальнейшее невключение, а то я дома вообще сейчас ниодного компилятора не имею. Есть мелкое подозрение, поскольку у товарища в тексте его хедер-файла есть такое вот:
#ifndef TIME.H
#define TIME.H
Если это уже отдефайнено в системном time.h, этот хедер не попадет под компиляцию, ну и дальше ругань будет... Правда Вы так и не привели полный вывод сообщений, и можно только гадать, что там на самом деле происходит.
Цитата
как подготовить второй файл к тому, что бы в него можно было ввести заголовочный файл, еще: нужно ли его размещать кде-нибудь, или компилятор его сам размещает?
В каком смысле подготовить? Отлично
Никак, кроме встроенного редактора ВС  Ага или любого другого редактора.
А вообще, если это просто консольное, например, приложение, то достаточно в описании проекта включить файл содержащий функцию main() и файл с реализацией этого класса time. Все это добро (ну например 3 файла time.h time.cpp и main.cpp) свалить в одну директорию, и посмотреть, правильно ли прописаны пути до include-файлов и библиотек в настройках рабочей среды ВС. Все должно проходить "на ура"
« Последнее редактирование: 16-03-2005 03:48 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 16-03-2005 05:20 » 

Вообще обычно используют символ нижнего подчеркивания, а не точку, для защитных дефайнов в заголовочных файлах. Но это кому как удобно Ага
Думаю, что такой способ (с точкой) не будет конфликтовать ни с одной библиотекой... если компилятор позволяет.
Вот, например, в микрософтовском заголовоном файле такая запись:
#ifndef _INC_TIME
#define _INC_TIME
В GNU проектах обычно пишут что-то типа
#ifndef _TIME_H.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 16-03-2005 12:17 » 

Hooter, тоочка не может быть частью имени, т.к. является оператором.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 16-03-2005 17:10 » 

Hooter, тоочка не может быть частью имени, т.к. является оператором.
RXL, я ж написал - "если позволит компилятор" Улыбаюсь
Поэтому я и сказал про символ нижнего подчеркивания Ага
MSVC 6.0, например, ругается на точку в строке "#ifndef TIME.H".
Другие компиляторы я не проверял, но так как это отклонение от стандарта, то тоже не должны пропустить... Но утверждать не берусь.

kasper, может в этом дело? Улыбаюсь
Записан
kasper
Гость
« Ответ #17 : 16-03-2005 20:38 » 

Посмотрите, пожалуйста, в самом начале страницы.
Две проги.
Одна - заголовочный файл.
Вторая - программа, в которую нужно этот заголовочный файл включить.
Что нужно сделать, что бы все заработало?
Обе проги небольшие.
Посмотрите, пожалуйста.
А я, буду в дальнейшем делать по образу и подобию, как говорится.
Очень надо, однако, потому что освоение С++ встало из-за этого.
Plizzz...
Записан
kasper
Гость
« Ответ #18 : 16-03-2005 20:41 » 

Компилято
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 16-03-2005 22:37 » 

kasper, присоедини исходники к посту.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #20 : 17-03-2005 03:37 » 

Цитата
Посмотрите, пожалуйста, в самом начале страницы.
Две проги.
Одна - заголовочный файл.
Вторая - программа, в которую нужно этот заголовочный файл включить.
Что нужно сделать, что бы все заработало?
Обе проги небольшие.
Прога-то наверное все-таки одна??? Быть такого не может Файлов видимо два... Ну и еще один (как минимум) должен быть с main() функцией.
Цитата
kasper, присоедини исходники к посту.
Похоже без этого не обойтись, такое впечатление что мы просто не понимаем о чем вопрос...
И кроме текстов, не плохо бы файл проекта, вдруг там что-то не так включено?
« Последнее редактирование: 17-03-2005 03:42 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #21 : 17-03-2005 19:23 » 

Михалыч, смотри на самом верху страницы.
Там по-моему чего-то нехватает, чего?
Я не знаю. Посмотрите, пожалуйста.
Возможно функции main( ).
Как включить? И куда, чтобы не нарушала структуру, если ошибка, конечно, в этом.
Потому как видел проги, рабочие, без main( ).
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #22 : 17-03-2005 19:38 » 

Каспер - что из советуемого выше ты уже сделал???
Записан

А птичку нашу прошу не обижать!!!
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 17-03-2005 23:19 » 

Цитата
Потому как видел проги, рабочие, без main( ).
Где??? (Я не знаю как поставить смайлик большого при большого удивления).
Поправьте меня если я не прав, но ты пишешь на Си, а в данном случае все начинается с функции main. Функция main в языке Си является началом всех начал, она уже в дальнейшем запустит твои функции проделает все что ты написал в ее теле и вернет какое-нибудь значение по окончанию работы.
Если я ошибаюсь, то очень прошу научить меня писать такие программы Улыбаюсь.
Записан

ещё один вопрос ...
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #24 : 18-03-2005 04:21 » 

Та-а-а-а-а-к....Отлично
Начинаем сначала. kasper - только спокойно. Это не наезды, у начинающих бывало и покруче.
Итак. Смотрим на то, что у тебя на самом верху.
Создаем директорию для нашего проекта, назовем (условно) mytime.
Там создаем 2 файла mytime.h и mytime.cpp и в них запихиваем то, что видим "выше".
Это - в mytime.h
#ifndef TIME.H
#define TIME.H

class Time {
public:
   Time();
   void setTime(int, int, int);
.... тут твое продолжение ....

Это - в mytime.cpp
#include<iostream.h>
#include "time.h"

Time::Time() {hour = minute = second = 0;}

void Time::setTime(int h, int m, int s)
{
   hour = (h >= 0 && h < 24) ? h : 0;
.... тут твое продолжение ....

На первый взгляд, того, что в этих файлах уже написано вполне достаточно для написания рабочей программы. Теперь будем писать функцию main(). Это можно сделать в том же файле mytime.cpp, но я лично привык реализации классов (в данном случае класса Time) писать в отдельных файлах. Итак, создаем еще один файл mytime_main.cpp и пишем в него, ну например такое:

#include "time.h"

void main(void)
{
  Time T;
  T.setTime(23, 30, 35);
  T.printMilitary();
  T.printStandart();
}

Все. Получили рабочую программу. Осталось скомпилировать и запустить.
Но! Ты работаешь с Борландом 4.5 - видимо надо создать проект, это проще для начинающего - работать в интегрированной среде, чем make-файлы писать. Хотя вопрос спорный, и не факт Улыбаюсь
Итак, берем самый простой вариант - не графическое, обычное консольное приложение, которое будет работать в виндовой консоли.
В борланде выбираем - создать новый проект. Тип проекта - консольное приложение.
Даем проекту имя - mytime. Указываем директорию где все это лежит (mytime), там появится еще и файл проекта mytime.bpr. Давно на Борланде не работал, поэтому точно не помню, что еще и где задается, но по крупному - кажется это все... Поправьте меня кто-нибудь, у кого под рукой Борланд 4.5 есть - толи в этом месте, когда проект создается, толи уже потом файлы в него добавляются... Короче, пока будем считать, что файлы потом добавляем. Итак, создали проект, залазим в меню view - project (вроде так) и добавляем файлы mytime.cpp и mytime_main.cpp в проект. Все.
Да, еще в конце программы, после T.printStandart(); можно (и наверное нужно) воткнуть какую-нибудь функцию которая ждет нажатия клавиши (на свой вкус), а то консоль закроется сразу, и результата не увидишь...
Больше и делать нечего. Выбираем project - build .....
И пишем очередной пост в форум, что не получилось  Ха-ха-ха Жжешь
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #25 : 18-03-2005 21:08 » 

Михалыч: все сделал, как сказано.
Одно только (или два): mytime[.cpp] в проекте уже есть.
                                   mytime_main.cpp - в проекте нет (стыдно сказать) но я не знаю как добавить.
Кроме этого, в проекте есть еще:
                                                    mytime[.def]
                                                    mytime[.rc]

На попытку компиляции, результат:
                                                    Linking mytime.exe:
                                                    Linker Warning: No module definition file specified: using defauls
                                                    Linker Fatal: Unable to open file 'mytime.obj'

P.S. "What maik?!"
           Чернышевский

Гром: я как и советовали, переименовывал файлы

nikedeforest: есть компиляторы, которые позваляют создавать проги с большим колличеством ошибок (синтаксических, конечно)
Смысл в том, что компилятор автоматом в страивает и исправляет, то что написано неправильно


« Последнее редактирование: 20-12-2007 16:12 от Алексей1153++ » Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 18-03-2005 22:00 » 

На попытку компиляции, результат:
                                                    Linking mytime.exe:
                                                    Linker Warning: No module definition file specified: using defauls
                                                    Linker Fatal: Unable to open file 'mytime.obj'
Скажи, ты какой пункт меню для компиляции выбираешь?
Похоже, что у тебя либо пути не прописаны, либо ты сразу линкуешь, а этап компиляции пропускаешь...
« Последнее редактирование: 20-12-2007 16:13 от Алексей1153++ » Записан
kasper
Гость
« Ответ #27 : 18-03-2005 22:05 » 

Я делаю все по-порядку. скорее у меня пути не прописанны. Как прописать?
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 19-03-2005 04:17 » 

to kasper
Вопрос по ходу дела - ты все-таки консольное сейчас приложение пытаешся собрать или графическое? Это судя по тому, что с твоих слов, в проекте есть еще файлы *.def и *.rc, я уже давно с борландом не работаю, могу и ошибаться, но помоему это определения и ресурсы для графического приложения.
Если это так - не пожалей времени, начни все по-новой, убив все файлы в директории, кроме файлов программы, конечно (т.е. *.cpp и *.h) и создай проект снова, но гарантированно консольный, это проще, чем с графикой сразу копаться...
Теперь - как добавить файл в проект - открываешь view-project а потом в окне проекта на правую кнопку мыши, а там уже в контекстном меню выбираешьь add, вроде так. (это было давно, и честно говоря не на 4.5 на борланде 5.02 а у них интегрированные среды вроде разные слегка)
О прописывании путей. Пути к твоему проекту вообще не нужны. Проверь только системные пути до либ и инклудов. Это в меню options-environment (кажется) а там найдешь. Хотя, если борланд устанавливался по умолчанию, (т.е. в C:\BC) то все д.б. правильно.
О правильной сборке проекта - или project-build или project-makeall - не помню точно, ну или отдельно откомпилить все сначала, а потом линковать...
Цитата
есть компиляторы, которые позваляют создавать проги с большим колличеством ошибок (синтаксических, конечно)
Смысл в том, что компилятор автоматом в страивает и исправляет, то что написано неправильно
Первое позволяет любой компилятор, второе - это из области фантастики, иначе чего это у тебя не выходит никак??? Отлично
И еще... Тут в форуме, в другой ветке, с месяц назад (ну, примерно) какой-то kasper говорил, что он "прошел" книгу по С++ для начинающих, и просил чего-нибудь "покруче". Видимо "ПРОШЕЛ МИМО"... Отлично Это часом не ты? (Без обид)
« Последнее редактирование: 19-03-2005 04:20 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #29 : 19-03-2005 20:23 » 

Михалыч: это был я Улыбаюсь
Книжка маленькая была Улыбаюсь

Что я пытаюсь сделать, а именно: я хочу научится создавать заголовочные файлы и  включать их в прогу Улыбаюсь

Конкретнее:
Привожу выдержку из книги, касательно моей проблемы. (Как программировать на С++, Дейтел Х., Дейтел П)
(над чем я бьюсь)

“     При построении программы на С++ каждое определение класса обычно помещается в заголовочный файл, а определение функций-элементов этого класса помещаются в файлы исходных кодов с теми же базовыми именами. Заголовочные файлы включаются (посредством #include) в каждый файл, в котором используется класс, а файлы с исходными кодами компилируются и компонуются с файлом, содержащим главную программу. Посмотрите документацию на ваш компилятор, чтобы определить, как компилировать и компоновать программы, содержащие множество исходных файлов.
               Программа на рис.6.3. состоит из заголовочного файла time1.h, в котором объявляется класс Time, файла time1.cpp, в котором описываются функции-элементы класса Time, и файла fig6_5.cpp, в котором описывается функция main. Выходные данные этой программы идентичны выходным данным программы на рис. 6.3.”

//TIME1.H
//Объявление класса Time.
//Функции-элементы определены в Time.CPP

//Предотвращение многократного  включения заголовочного файла
#ifndef TIME1_H
#define TIME1_H
// определение абстрактного типа данных Time
class Time {
public:
   Time();                                   //Конструктор
   void setTime(int, int, int);

   void printMilitary();
   void printStandart();

private:
   int hour;
   int minute;
   int second;
};
#endif

Рис.6.5. Заголовочный файл класса Time (часть 1 из 3)

//TIME1.CPP
// Определения функций-элементов для класса Time.

#include<iostream.h>
#include "time1.h"

Time::Time() {hour = minute = second = 0;}

void Time::setTime(int h, int m, int s)
{
   hour = (h >= 0 && h < 24) ? h : 0;
   minute = (m >= 0 && m < 60) ? m : 0;
   second = (s >= 0 && s < 60) ? s : 0;
}

void Time::printMilitary()
{
   cout<<(hour < 10 ? "0" : "")<<hour<<":"
       <<(minute < 10 ? "0" : "")<<minute<<":"
       <<(second < 10 ? "0" : "")<<second;
}

Рис.6.5. Исходный файл определений функций-элементов класса Time  (часть 2 из 3)

//FIG6_5.CPP
//Драйвер класса Time1
//Замечание: Компилируется вместе с TIME1.CPP
#include<iostream.h>
#include "time1.h"

//Драйвер для проверки простого класса Time
int main()
{
   Time t;

   cout<<"Начальное значение военного времени равно ";
   t.printMilitary();
   cout<<endl
       <<"Начальное значение стандартного времени равно ";
   t.printStandart();

   t.setTime(13, 27, 6);
   cout<<endl<<endl<<"Военное время после setTime равно ";
   t.printMilitary();
   cout<<endl<<"Стандаотное время после setTime равно ";
   t.printStandart();

   t.setTime(99, 99, 99);

   cout<<endl<<endl
       <<"После попытки неправильной установки: "
       <<endl<<"Военное время: ";
   t.printMilitary();
   cout<<endl<<"Стандартное время: ";
   t.printStandart();
   cout<<endl;
   return 0;
}

Вот такие дела.
Пожалуйста * 1000, скажите, как запустить ‘ЭТО’ на орбиту.
(C помощью создания проекта, наверное)
Пробовал. Улыбаюсь
Если это действительно реально, то как создать проект из этого?ъ

Записан
kasper
Гость
« Ответ #30 : 19-03-2005 20:25 » 

Если можно, то ответьте ступенчато, примерно как в виде псевдокода
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #31 : 19-03-2005 20:37 » 

Судя по тому, что у тебя int main(). Это консольное приложение. Создай консольное приложение без поддержки GUI.  Перекопируй в головной файл содержимое твоего головного файла. Сохрани проект и файл. В этот католог перекопируй свою библиотеку. Да кстати. Я столкнулся с такой проблемой. Билдер не работает на прямую с моими заголовочными файлами. Поэтому к проекту я подключаю файлы с расширением cpp. Как его уговорить в обратном. Пока до меня не дошло.
« Последнее редактирование: 19-03-2005 20:41 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
kasper
Гость
« Ответ #32 : 19-03-2005 20:44 » 

Finch: 1) Как создать консольное приложение без потдержки GNU?
         2) Как перекопировать в головной файл содержимое моего головного файла?
         3) Где находится каталог?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #33 : 19-03-2005 20:53 » 

Если ты находишся в Билдере. Там есть меню File -> New
В открытом визарде выбираеш "Console Application" или типа того.
В Визарде выбираеш Не поддерживать GUI и EXE файл.
У тебя должно появится окно с начальным кодом программы.
Это и есть головной файл. Отмечаеш все содержимое и удаляеш. Потом отмечаеш все содержимое своего головного файла. Делаеш копирование в буфер. Затем вставляеш в головной файл своего проекта. Затем Даеш на запись проекта. Он спросит тебя под каким именем ты хочеш его сохранить. И заодно ты можеш выбрать, на каком диске и в каком катологе будет хранится твоя прога. И все.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
kasper
Гость
« Ответ #34 : 19-03-2005 21:06 » 

Finch: Console Application, по идее должен быть, но его я не нашел (все просмотрел не один раз), вернее я нашел в New Target -> Target Type -> Application[exe]. Что дальше?
Визард - где его искать.
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 20-03-2005 15:45 » 

Все, господа... Извините, я сдаюсь...
Ну, как еще объяснить человеку?Не понялНе понялНе понял
to Finch - будьте внимательны, не путайте человека окончательно, он говорил что работает с Borland C++ 4.5, а это совсем не билдер...
to kasper
Вернись к моим последним 2-м постам, там сказано ВСЕ, что я могу сказать о том как создать новый проект, и как в него файлы добавить. Это где-то в меню project-new или file-new-project (ну не помню, сам смотри). Вместо понятия консольного приложения, там присоздании нового проекта может быть ДОС-приложение, это будет в принципе тоже самое...
Если только вернуться к твоему последнему сообщению, то у тебя в директории ДО создания проекта должно быть 3 файла: FIG6_5.CPP, TIME1.H и TIME1.CPP
Все, дальше из этих 3-х файлов создаем проект для компиляции. Как - лучше чем говорил уже сказать не смогу, может, кто другой...
Еще вопрос - ну как у тебя терпения хватает ковыряться с этим примером уже неделю?
Есть ведь поиск в интернете, на предмет работы конкретно с ВС4.5, есть книги, и не одна.
Ну, на крайний вариант, есть ведь HELP в интегрированной среде, где написано, КАК составить проект...
« Последнее редактирование: 20-03-2005 15:54 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #36 : 20-03-2005 16:39 » 

Во, блин, и ведь не поленился, нашел...
На, лови, если и это не поможет - я застрелюсь...
http://www.codenet.ru/progr/cpp/4/
Правда это по версии 4.0, но я уверен, что разница не велика, а принцип на 100% тот же Отлично
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #37 : 20-03-2005 20:43 » 

Господа, спасибо Всем большое, нашел отличную книгу по Builder C++ 4.5 (спасибо Михалычу!)
Теперь постараюсь сам справится с проблемой.

Во, блин, и ведь не поленился, нашел...
На, лови, если и это не поможет - я застрелюсь...
Что говорит о том, что имеет огнестрельное оружие  Отлично
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #38 : 21-03-2005 04:05 » 

Цитата
Господа, спасибо Всем большое, нашел отличную книгу по Builder C++ 4.5 (спасибо Михалычу!)
Да завсегда пожалуйста Отлично
Только книга не по BUILDER-у а по Borland C++ 4
Цитата
Да, забыл сказать, я пишу в среде Borland C++ 4.5
Ты уж определись как-нибудь окончательно с чем же ты работаешь Отлично
« Последнее редактирование: 21-03-2005 04:11 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #39 : 22-03-2005 20:34 » 

Михалыч: Ну смысл все равно же понятен, что я хотел сказать  Отлично
Записан
Migmile
Помогающий

ru
Offline Offline

« Ответ #40 : 24-03-2005 16:28 » 

Я ужасно извиняюсь, но зачем было создавать проект? Не проще, как в старые добрые времена, пользоваться командной строкой типа
bcc32 file.cpp file2.cpp ...
IMXO? для начала это и понятнее и полезнее
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #41 : 24-03-2005 16:45 » 

А вне всяких сомнений. На мой взгляд именно так бы и надо. Только вот подавляющее большинство виндовых пользователей (хорошо если я ошибаюсь), особенно тех кто даже и не знает (не то что не помнит, а именно и не видел никогда) как работалось в МС ДОС - не умеют и не любят работать в консоли.
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Migmile
Помогающий

ru
Offline Offline

« Ответ #42 : 24-03-2005 17:57 » 

А если вспомнить времена, когда в ходу были dr-doc, pc-doc, а norton commander - и в глаза не видели, хорошо если были xtree, pc-tools and so on.
Эх, опять ностальгия замучила Отлично
Записан
kasper
Гость
« Ответ #43 : 25-03-2005 21:22 » 

Михалыч: мне так посоветовали Улыбаюсь
Поэтому я и делаю проект.
(см. выше)
 
Записан
kasper
Гость
« Ответ #44 : 25-03-2005 21:24 » 

Михалыч: поясни, пож. как можно работать с помощью ком строки. Файл компилируется при етом???
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #45 : 26-03-2005 05:32 » 

Да, вот, примерно то, что и было показано выше. Как раз и есть просто компиляция...
Не заморачивайся пока на этом. Это быстрее работает и иногда удобнее, но далеко не всегда. А у интегрированной среды есть несомненные преимущества - тебе сразу показываются все ошибки и варнинги, и их сразу можно редактировать, плюс отладка и еще куча всего...
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #46 : 27-03-2005 20:23 » 

I do, i do.
I andestend what you sey my. Thank you big.
Я так понял, что после ООП, изучение С++ заканчивается? Если честно, то не верится, почемуто. Что там дальше после создания классов, перегрузки, полиморфизме и иже с ними? У меня книга заканчивается!!!
Чуть не плачу, что делать?  Так больше нельзя...
 Жжешь  Вот такой я вот Отлично
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #47 : 28-03-2005 03:09 » 

Гы-ы-ы-ы-ы-ы!... Отлично Отлично
Дальше кончается грустная теория и начинается веселуха - практика, практика и еще раз практика !
Ну, а границ у познания нет, поэтому С++ можно еще очень долго изучать, пока не станешь экспертом. Это же ЯЗЫК, стало быть ему можно учиться, практиковаться и совершенствоваться бесконечно...
Ну, а шобы дитя не плакало, нехай оно, например, STL изучать начнет, или типа, "умные" указатели а-ля Д. Элджер... Хотя, лучше в теоритических началах  попрактиковаться.
Да, еще забыл спросить:
Цитата
I do, i do.
I andestend what you sey my. Thank you big.
Это на каком языке  :? :? :?  Отлично Отлично Отлично   Ха-ха-ха
« Последнее редактирование: 28-03-2005 03:11 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Migmile
Помогающий

ru
Offline Offline

« Ответ #48 : 28-03-2005 08:14 » 

Это на каком языке :? :? :? Отлично Отлично Отлично  Ха-ха-ха
рашн-америкашн
Как раз и есть просто омпиляция...
На самом деле не просто компиляция, а полная компановка:)
Записан
Migmile
Помогающий

ru
Offline Offline

« Ответ #49 : 28-03-2005 08:40 » 

Kasper, попробуй сделать smart калькулятор - пользователь вводит арифметическое выражение со скобками, некоторыми функциями (sin, cos,...). программа должна посчитать результат.
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #50 : 28-03-2005 10:21 » 

Эх, хорошо, наверное, kasper-у... Делать нечего, книжка дочитана...
Мне бы так (сказано мечтательно) Отлично
На самом деле не просто компиляция, а полная компановка:)
Оченно даже могобыть Улыбаюсь
Я уже года 2, наверное с борландами не работаю. А до того, как ушел с него, сам работал только в IDE...
А сейчас исключительно qcc под QNX, там все не совсем так, как в ВС
« Последнее редактирование: 28-03-2005 10:23 от Михалыч » Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
kasper
Гость
« Ответ #51 : 29-03-2005 20:08 » 

Калькулятор уже сделан мною давно (сам делал без чьей-либо помощи!!! Отлично).
Причем разными методами. привожу сдесь один (учитесь Отлично):

#include<iostream.h>
#include<iomanip.h>
#include<math.h>

void f1();
void f2();
void f3();
void f4();

int main()
{
   cout<<"* * * МАШИНКА ДЛЯ ПРОИЗВЕДЕНИЯ РАСЧЕТОВ * * *\n";

   while(1)
   {
   cout<<setw(20)<<"введите требуемое вам действие.\n"
       <<"(1)сумма, (2)разность, (3)частное, (4)произведение\n";
   cout<<"___________________________________________________\n";
   int number;
   cin>>number;
   switch (number)
   {
      case 1: f1();
      break;
      case 2: f2();
      break;
      case 3: f3();
      break;
      case 4: f4();
      break;
   
      default:
              cout<<"What you enter?\n";
   }
   }
   return 0;
}

void f1()
{
     int x, y;
     cout<<"Введите первое слагаемое: ";
     cin>>x;
     cout<<"Введите второе слагаемое: ";
     cin>>y;
     cout<<x + y<<"\n";
}

void f2()
{
     int i, j;
     cout<<"Введите первое слагаемое: \n";
     cin>>i;
     cout<<"Введите второе слагаемое: \n";
     cin>>j;
     cout<<i - j<<"\n";
}

void f3()
{
     int n, m;
     cout<<"Введите первое слагаемое: \n";
     cin>>n;
     cout<<"Введите второе слагаемое: \n";
     cin>>m;
     cout<<n * m<<"\n";
}

void f4()
{
     int z, s;
     cout<<"Введите первое слагаемое: \n";
     cin>>z;
     cout<<"Введите второе слагаемое: \n";
     cin>>s;
     cout<<z / s<<"\n";
}

Пожалуйста, скажите now, что мне следует изучать после С. Почему я написал С, а не С++? Потому что сегодня разговаривал с одним Титаном, без шуток, он мне объяснил, что в принципе, изучал я не С++, а С. Теперь надо заняться С++. Причем так хорошо объяснил, что я понял.
Попутно не мешало бы ознакомится с тем, куда я буду применять сей инструмент (С++).
Посоветуйте, пожалуйста, очень прошу (именно: область применения в практичеком смысле).
Пожалйста, с приведением литературы по данному вопросу.
И еще: все книги по языкам программирования, как я понял, не учат языку, а показывают возможности того или иного языка.
И поэтому трудно для восприятия, особенно, новеньким, понять изучаемый язык. Со мной кто-то не согласен? Могу Аргументировать.
Записан
kasper
Гость
« Ответ #52 : 29-03-2005 20:13 » 

Михалыч: пожалуйста поподробней, что это - STL , "умные" указатели а-ля Д. Элджер...
Ссылка е?
Что это даст? В плане "прогрессии".
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #53 : 30-03-2005 03:23 » 

Смотри книгу Jeff Alger. C++ for real progammers. (В русском переводе почему-то Джефф Элджер. С++).
Ссылку немае. Но в сети есть - точно. STL - это standart template library, обсуждалось в десятках разных форумов, в этом - в том числе.
Батенька, а для вас есть понятие поиска в сети, или все надо готовенькое выложить?
Цитата
Давай-давай... Сама--сама-сама!...  (х\ф "Вокзал для двоих")
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Migmile
Помогающий

ru
Offline Offline

« Ответ #54 : 30-03-2005 09:13 » 

Калькулятор уже сделан мною давно (сам делал без чьей-либо помощи!!!
Это не калькулятор, а калькуляторик:)))
Ввод в программу выражения "y=56.3*2+6/(3-1.5*(sin(x)+3))", ну и т.п.

все книги по языкам программирования, как я понял, не учат языку
Много хуже другое! Все книги по языкам программирования НЕ УЧАТ ПРОГРАММИРОВАТЬ! Они позволяют познакомиться с инструментом, но не объясняют весь процесс.
Записан
kasper
Гость
« Ответ #55 : 31-03-2005 20:05 » 

Михалыч: книгу я найду, если она есть в сети, конечно, на русском.
               Самое главное, чтобы был смысл поиска. Вот скажи, сам, смысл есть?
               В книге описывается процесс создания? В ней учат??! У меня уже есть книги в электронном виде,
               Но в них,: в некоторой много опечаток, что создает процесс обучения очень трудноперевариваемым.
               Либо плечи влезают, голова не лезэ, либо голова не лезэ, плечи проходют. В других, самые важные
               детали почему то пропускаются, как специально. У вся "понятийная модель" разваливается у меня в
               руках!!!
               В слепую нельзя писать! Скалько времени тратится зря!!! Для примера:
               приходится просматривать уйму книг, чтобы понять систему написания массива,
               присвоения отдельным элементам массива значений, случайных или заданных, и вывод их (значений)
               в пользовательскую среду!!!

Migmile: займусь этим завтра. (Ввод в программу выражения "y=56.3*2+6/(3-1.5*(sin(x)+3))", ну и т.п.)               
 
                P.S. Порекомендуйте мебель, о которую я могу поточить когти
                      (имеется ввиду, создание приложений для windows, - какую-либо литературу, как начинать, 
                       продолжать и заканчивать)
                 
                Спасибо за внимание (точка)
Записан
Михалыч
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #56 : 01-04-2005 03:01 » 

Цитата
В слепую нельзя писать! Скалько времени тратится зря!!!
А кто-то сказал, что будет легко и просто?
Умение программировать САМО не приходит, это довольно тяжкий ТРУД...
В качестве совета - учи английский. Без этого все равно не обойтись.
Записан

Поживем - увидим... Доживем - узнаем... Выживу - учту  Улыбаюсь
Migmile
Помогающий

ru
Offline Offline

« Ответ #57 : 01-04-2005 08:18 » 

А кто-то сказал, что будет легко и просто?
Умение программировать САМО не приходит, это довольно тяжкий ТРУД...
В качестве совета - учи английский. Без этого все равно не обойтись.
Абсолютно правильно!
И не гонись за красивостью, интерфейсом, громадностью. Учись на простейших задачках, доведи их до совершенства, тогда дальше будет на порядок легче разбираться с более сложными.
Записан
kasper
Гость
« Ответ #58 : 02-04-2005 19:52 » 

Привет! Купил сегодня одну замечательную книжицу.
Название:
                Шлее М. “Qt Профессиональное программирование на С++”. СПб.: БХВ-Питербурх, 2005. – 544 с.: ил. ISBN 5-94157-566-1.
         Короче говоря, это то, что называется “программирование для Windows”.
Вместе с книгой идет компакт-диск с библиотекой Qt и примерами исходников.
Кроме этого есть еще Qt Designer (среда для написания программ). Вначале я подумал, что автор книги предлагает в ней вести дальнейшую работу. Но оказалось, что Qt Designer позволяет работать только с формами, на примере Visual Basik. ( Да…, все верно, Visual Basik позволяет работать не только с окнами, поэтому я и сказал – на примере).
         Тогда я открыл книгу, и там, на 523  странице написано: “На прилагаемом к данной книге CD помещена библиотека Qt и исходные тексты описанных в книге примеров. Каждый из примеров хранится в отдельном каталоге. Для их компиляции следует скопировать директорию, содержащую примеры (Examples), на жесткий диск своего компьютера, создать make-файл, при помощи программы qmake, и запустить утилиту make.”
        Я заходил в папку qmake, но исполняемого файла не нашел.
Далее:
         Пробовал использовать библиотеку Qt следующими способами:
Добавлял файлы из библиотеки Qt в файлы библиотек следующих компиляторов: Borland C++ 4.5, Visual C++  6.0.
         У меня ничего не получилось.

         
         Привожу пример исходника, использующего файлы из библиотеки Qt:
#include<qapplication.h>
#include<qlabel.h>

int main (int argc, char** argv)
{
   Qapplication app (argc, argv);
   Qlabel lbl (“Hello, World !”, 0);
   App.setMainWidget (&lbl);
   Lbl.show ( );

   Return app.exec( );
}

В этой программке, компилятор Borland C++ 4.5 нашел аж 10 ошибок.

Скажите, пожалуйста, как использовать библиотеку Qt для создания программ. (Желательно с использованием компилятора Borland C++ 4.5. или на худой конец, Visual C++ 6.0. )
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #59 : 02-04-2005 21:14 » 

kasper, при использовании Qt, если создаются новые классы, то исходники требуют предварительной обработки (типа пре-претрансляция) - некоторые сервисные макросы преобразуются в реальный текст программы. Теперь можно компилить выходные файлы предыдущего шага. В общем, весь процесс не помню - как и чем не скажу - давно было. Что точно, что делал сборку простенького теста в VC6. Прописывал пути к зголовкам и библиотекам. Но дальше теста дело не пошло.
Посмотри доки на www.trolltech.com - может так они написали, как с ними под виндой управляться.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #60 : 02-04-2005 21:21 » 

Цитата
Qt/Windows can be used with Visual Studio .Net, Microsoft Visual C++ 6.0 or Borland Builder 5 (bcc32 5.5). The distribution includes qmake, a build tool that creates makefiles for Microsoft's nmake and for Borland's make as well as project files for Microsoft Visual C++ (.dsp files).
http://doc.trolltech.com/3.3/qmake-manual.html
« Последнее редактирование: 19-12-2007 21:47 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #61 : 05-04-2005 08:43 » 

А зачем сразу Qt? Чем WinAPI не устраивает?
Записан

Удачного всем кодинга! -=x[PooH]x=-
Migmile
Помогающий

ru
Offline Offline

« Ответ #62 : 05-04-2005 10:13 » 

IMXO, для начала надо начинать с начала:)
Надо разобраться с основами, а затем уже смотреть, что может облегчить жизнь
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #63 : 05-04-2005 17:58 » 

Михалыч, библиотеки пропиши в пути VC, полезно переменную QTDIR назначить, ну и moc надо как-то воспользоваться.

Гиморрой с этой виндой - чего ценного не прикручивай, а все криво висит.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #64 : 06-04-2005 06:48 » 

потому что у меня есть лит-ра для него и бибилиотеки, потомучто он платформенно   независим, потомучто он одинаков и для Linux, и для Windows и др.

Для него - кого? Qt и есть библиотека!!! "Он одинаков" - написание графического интерфейса одинаково, а написание бизнес-логики? Наличие лит-ры я не считаю основополагающим фактором выбора между Qt и WinAPI. На WinAPI доки найти горозда проще (даже здесь есть)!!! Тем более (точно не знаю, но скорее всего) Qt под Windows написана как раз на WinAPI. Так зачем ограничивать себя интерфейсом Qt?!! На мой взгляд MFC (или VCL) гораздо шире и практичней. Qt оправдывает себя только тогда, когда планируется перенос проги с Винды на Линух и обратно, и все-равно простого перехода не получится(!), в таком случае лучше Яву учить.
Записан

Удачного всем кодинга! -=x[PooH]x=-
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #65 : 06-04-2005 06:54 » 

Короче, компилирует, линкует, проверяет на ошибки, а итог, т.е. саму прогу, не выводит. И еще: не могу найти файла с расширением .exe уже скомпилируемой проги.

Что значит "проверяет на ошибки"? - это включено в компиляцию и линкование. Линкование - сбор объектных файлов в исполняемый файл или библиотеку! Или линкования не происходит или происходит с ошибками. Каталог для исполняемого файла определяется в параметрах проекта, даже два каталога для Debug версии и для Release. Взависимости от типа сборки, исполняемый файл будет или в одном каталоге или в другом. Смотри параметры проекта (которые ты сам же и должен был настраивать)
« Последнее редактирование: 06-04-2005 06:57 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
Migmile
Помогающий

ru
Offline Offline

« Ответ #66 : 06-04-2005 09:06 » 

Короче, компилирует, линкует, проверяет на ошибки, а итог, т.е. саму прогу, не выводит. И еще: не могу найти файла с расширением .exe уже скомпилируемой проги.
Или линкования не происходит или происходит с ошибками. Каталог для исполняемого файла определяется в параметрах проекта, даже два каталога для Debug версии и для Release.
а заодно проверь тип пректа - если создается dll, то exe-шник ты вряд-ли найдешь:)
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #67 : 07-01-2006 13:35 » 

Набрёл на тему через поисковик.

Возвращаясь к самому началу.

Имеем Borland C++ 3.1. Имеем ошибку "Linker error: Undefined symbol ..."

Как она получается.

Имеется проект (не важно, DOS или Win - одинаково).

Тест #1.

// File : main.cpp
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}

Работает.

Тест #2.

// File : other.cpp
#include <stdio.h>
#include "other.h"
void f()
{
printf("Hello world!\n");
}

// File: other.h
#ifndef OTHER_H
#define OTHER_H
void f();
#endif

// File: main.cpp
#include "other.h"
int main()
{
f();
return 0;
}

Работает.

Тест #3.

// File : other.cpp
#include <stdio.h>
#include "other.h"
void C::m()
{
printf("Hello world!\n");
}

// File: other.h
#ifndef OTHER_H
#define OTHER_H
class C
{
public :
void m();
};
#endif

// File: main.cpp
#include "other.h"
int main()
{
C c;
c.m();
return 0;
}

Работает.

Тест #4.

// File : other.cpp
#include <stdio.h>
#include "other.h"
template<class T>
void C<T>::m()
{
printf("Hello world!\n");
}

// File: other.h
#ifndef OTHER_H
#define OTHER_H
template<class T>
class C
{
public :
void m();
private :
T t;
};
#endif

// File: main.cpp
#include "other.h"
int main()
{
C<int> c;
c.m();
return 0;
}

Linker Error: Undefined symbol c<int>::m() in module MAIN.CPP

Кто может объяснить, почему так происходит? Может настройки какие-нибудь влияют?
« Последнее редактирование: 07-01-2006 13:46 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #68 : 07-01-2006 13:39 » 

Да, забыл.

Тест #5.

// File: main.cpp
#include <stdio.h>
template<class T>
class C
{
public :
void m();
private :
T t;
};
template<class T>
void C<T>::m()
{
printf("Hello world!\n");
}
int main()
{
C<int> c;
c.m();
return 0;
}

Работает.
« Последнее редактирование: 07-01-2006 13:46 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #69 : 07-01-2006 13:49 » 

Ну шаблоны классов и их реализация должна происходить в одном файле. Где то на форуме npak уже объяснял почему.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #70 : 07-01-2006 13:50 » 

Хм... в GCC тоже.

$ g++ main.cpp other.cpp
~/tmp/ccKvVi4X.o: In function `main':
~/tmp/ccKvVi4X.o(.text+0x18): undefined reference to `C<int>::m()'
collect2: ld returned 1 exit status

Значит дело не в старом компиляторе, а синтаксисе.
« Последнее редактирование: 19-12-2007 21:48 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #71 : 07-01-2006 13:51 » 

Finch, ок, поищу.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #72 : 07-01-2006 14:11 » 

Цитата: npak
Для того, чтобы компилятор смог сгенерировать тела метов инстанциированного класса, необходимо, чтобы текст шаблона был видим в точке инстанциирования шаблона.  Перенеси все методы в заголовочный файл.

Для примера посмотри заголовки STL -- iostream, string, etc.  В них содержатся полные реализации стандартных шаблонов.

Понятно.

// File : other.cpp
#include "other.h"
void X::m()
{
c.m();
}

// File : other.h
#include <stdio.h>
template<class T>
class C
{
public :
void m();
private :
T t;
};
template<class T>
void C<T>::m()
{
printf("Hello world!\n");
}
class X
{
public :
void m();
private :
C<int> c;
};

// File : main.cpp
#include <other.h>
int main()
{
X x;
x.m();
return 0;
}

Работает.

Спасибо за подсказку.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
vananabu
Интересующийся

ru
Offline Offline

« Ответ #73 : 29-04-2011 17:03 » 

Подскажите, пожалуйста, можно ли добавить таблицу констант (таблицу S_box) в заголовочный файл:

const int sbox[256] ={
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0x95, 0x83, 0x38,
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16}
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #74 : 29-04-2011 17:24 » 

vananabu, нет, в заголовочном файле должна быть декларация идентификатора sbox с пометкой extern, а сама таблица должна быть в файле кода. В противном случае в разных объектных файлах окажутся копии одной и той же таблицы, что будет обнаружено редактором связей, и возникнет неопределённость.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: 1 2 3 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines