У меня тот же самый вопрос, что и у автора этой темы, только ему не ответили. Как сделать с свои header файлы? Есть функция в файле cpp, ну я изменил расширение на h, кинул в папку include, но всеравно пишет, что такого хидера нет...
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
tolikrog А мозг включить? Предположим, что у Вас программа состоит из нескольких функций:
Код:
void main (void) {...}
void func1() {...}
void func2() {...}
Хидер нужен для того, чтобы а) не важен был порядок определения функций в cpp файле б) чтоб можно было вынести разные функции в разные файлы и программа знала, что у нее есть эти ф-ции. Тоже с классами, переменными и пр. объектами, которые будут использоваться в нескольких файлах. Теперь Вы хотите, чтобы func1 и func2 были в файле func.cpp, а main - в prog.cpp. Для этого сделаем так: func.cpp
Код:
#include "func.h" // в данном случае этот инклюд необязателен. void func1() {...}
void func2() {...}
prog.cpp
Код:
#include "func.h" // а как Вы думаете работают инклюды стандартных функций? // пока не сделаете include стандартным заголовкам - программа не будет знать, что есть функции стандартной библиотеки C - printf, cos, sin и пр. void main(void) {....}
func.h
Код:
// здесь будут прототипы ф-ций void func2(); void func1();
И самое главное - НИЧЕГО в каталог include кидать не надо. include "file" - добавляет заголовочный файл из текущего каталога include <file> - добавляет заголовочный файл из стандартного каталога программы (среды разработки, компилятора) - задается в настройках.
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
tolikrog в проект запихать все cpp файлы... Если делается все в среде (какой тоже не указано - ну, и как тут можно помогать??? )
Цитата:
Но теперь пишет - Undefined symbol название функции.
КТО??? Компилятор, линкер или еще кто?
Цитата:
Если указывать только funс.h, то от куда он может знать, что все функции описаны в файле func.cpp?
компилятор это и не должно волновать. Он из func.h узнает, что есть некие символы, которые можно использовать. Чем он и занимается. А потом линкер (компоновщик связей) собирает все в кучу и если есть некая функция, у которой отсутствует тело, то начинает ругаться - дайте исходник (объектник) или библиотеку, где она есть.
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
И прототипы и тела функции положил в один файл, и все стало работать - меня это устраивает. Раньше, я сделал по вашей инструкции, и читался .h файл только с прототипами функций, а с телами в .cpp не читался... Теперь работает, так как тела функций в том же .h файле, что и прототипы. Спасибо еще раз за помощь!
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
tolikrog
Цитата:
Теперь работает, так как тела функций в том же .h файле, что и прототипы.
не... это неправильно. Могли бы еще почитать справку по ключевому слову 'extern' и заодно попросвещаться касательно области определений и работе с программой (проектом) из нескольких cpp/h-файлов.
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Не читает .h файл, напишите, что у меня сделано неправильно... На скрине видно ошибку, сами файлы, и то что в компиляторе указана папка, где эти файлы.
Member
Статус: Не в сети Регистрация: 14.11.2008 Откуда: Украина, Одесса
Перерыл гугол... Конфу... Ничего не нашел - обращусь к вам) Простейшее задание по С++ - нужно перевести математический пример с двумя\тремя неизвестными на С и сделать программу которая будет считать ответ при вводе 2х неизвестных... Где можно прочитать про это!!???
Member
Статус: Не в сети Регистрация: 14.11.2008 Откуда: Украина, Одесса
нее... я имел в виду как сам пример перевести... то есть пример дан сложный - деление логарифма на модуль кубического корня итд.. как его записать - хз... где можно правила почитать, как перевести?
нее... я имел в виду как сам пример перевести... то есть пример дан сложный - деление логарифма на модуль кубического корня итд.. как его записать - хз... где можно правила почитать, как перевести?
Ты хочешь почитать про математические функции в c++ (логарифм, возведение в степень и т.д.) - я правильно понял? Если так, то, насколько я помню, в c++ есть библиотека math.h и там есть базовые мат. функции. Вот, например, описание логарифма (там и другие есть).
Member
Статус: Не в сети Регистрация: 25.08.2005 Откуда: SPb
Сегодня писал тестовую фигулинку и обнаружил такую фигню с рандомом: после инициализации srand'ом rand выдает значения жестко привязанные ко времени. arr_size_f убывает на единицу в секунду, например во время первого запуска arr_size_f == 0.98, второго 0.97, третьего 0.95. Разница значений зависит не от номера пуска, а от времени прошедшего с последнего запуска. Компилятор борландовский (C++ Builder 6.0) У gcc с тем же кодом значение arr_size_f наоборот, растет, только гораздо медленнее. На других машинах код работает как и ожидается - нормально. В чем загвоздка?
Member
Статус: Не в сети Регистрация: 15.02.2009 Откуда: Лангепас
rand - генератор псевдослучайных чисел, высчитывается по определённому алгоритму и в разных реализациях (например в borland мы можем получить описанную картину). ты инициализируешь srand вполне определённым числом , которое зависит от времени. Попробуй где нибудь сохранять последнее случайное число и в последующем запуске проги инициализировать srand именно им. Можно попробовать вообще не инициализировать srand.
Сегодня писал тестовую фигулинку и обнаружил такую фигню с рандомом: после инициализации srand'ом rand выдает значения жестко привязанные ко времени.
Не совсем так. Правильнее будет сказать: "после инициализации srand'ом rand выдает ПЕРВОЕзначение жестко привязанным ко времени". Берите не первое, а, например, второе - и будет вам счастье - никакой привязки ко времени.
Member
Статус: Не в сети Регистрация: 25.08.2005 Откуда: SPb
Root mytime принимает значения времени в секундах. Увеличивается по одной в секунду, как и должно. oxy Просто я хорошо помню, что раньше srand нормально инициализировал rand и в билдере и в codeblocks(gcc).
theone писал(а):
после инициализации srand'ом rand выдает ПЕРВОЕзначение жестко привязанным ко времени". Берите не первое, а, например, второе - и будет вам счастье - никакой привязки ко времени.
Просто хочется понять, почему раньше первое значение не было жестко привязано ко времени как теперь?
Кстати, на другой машине исходник компилировался watcom'ом и работал как надо. У себя я не проверял, не успел. Еще забрасывал экзешник собранный у меня на другую машину, там странное поведение повторилось.
Просто хочется понять, почему раньше первое значение не было жестко привязано ко времени как теперь? Кстати, на другой машине исходник компилировался watcom'ом и работал как надо. У себя я не проверял, не успел. Еще забрасывал экзешник собранный у меня на другую машину, там странное поведение повторилось.
Я думаю, результат зависит не от машины, на котором запускается экзешник, а от компилятора, версии библиотек. Вполне возможно, что в некоторых компиляторах исправлен этот недостаток (то, что первое значение зависит от времени), и берется, например, сразу второе. Либо первое вычисляется по какой-то более сложной формуле.
Member
Статус: Не в сети Регистрация: 15.02.2009 Откуда: Лангепас
hub писал(а):
Кстати, на другой машине исходник компилировался watcom'ом и работал как надо. У себя я не проверял, не успел. Еще забрасывал экзешник собранный у меня на другую машину, там странное поведение повторилось.
Всё зависит от реализации rand() - у каждого производителя компилятора она своя (и у watcom`а и у borland`a) и зависит от версии библиотек. Не стоит инициализировать srand() временем - оно не случайно...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения