Форум программистов, компьютерный форум CyberForum.ru

Как сделать чтобы функция была видна из .cpp файла? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 09:02     Как сделать чтобы функция была видна из .cpp файла? #1
У меня есть 3 файла: main.cpp, 1.h, 1.cpp. Все делаю по книге, но получается так, что определение функции не видно из main().cpp

main.cpp
C++
1
2
3
4
5
6
7
8
#include "1.h"
 
int main()
{
   func1();  // Ошибка. Undefined reference to 'func1(void)'
 
   return 0;
}
1.h
C++
1
void func1();  // прототип функции
1.cpp
C++
1
2
3
4
5
#include "1.h"
void func1()     // определение функции
{
   //...
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 09:02     Как сделать чтобы функция была видна из .cpp файла?
Посмотрите здесь:

как сделать программно чтобы программа была постоянно на заднем плане C++
C++ как сделать так чтобы была возможность записывать и фамилию и имя,а то у меня только до пробела читает?
C++ Как сделать так, чтобы программа не компилилась, хотя синтаксически была бы правильной?
Как сделать так чтобы переменная в описании одной функции была доступна в описании другой? C++
C++ как сделать чтобы функция возвращала массив?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 23:05     Как сделать чтобы функция была видна из .cpp файла? #21
Intel~lect, вот обещанные мной скрины Кодблокс(всё делается довольно просто)
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?  

Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
21.08.2012, 23:56     Как сделать чтобы функция была видна из .cpp файла? #22
Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
2
3
4
5
#ifndef HEADER_H
#define HEADER_H
#endif
#include <iostream>
extern void foo();
extern не нужен. #endif должен быть в конце файла.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 01:12     Как сделать чтобы функция была видна из .cpp файла? #23
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
extern не нужен. #endif должен быть в конце файла.
обоснуй. Про extern понял ранее, обоснуй #endif. Почему именно должен? Кто обяазал и где?
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
22.08.2012, 01:22     Как сделать чтобы функция была видна из .cpp файла? #24
Цитата Сообщение от alkagolik Посмотреть сообщение
Про extern понял ранее, обоснуй #endif.
Ну это то элементарно
вся эта связка делается для того чтобы при компиляции тело файла включалось один раз
например
C++
1
2
3
4
5
6
7
8
#ifndef HEADER_H // при первом включении HEADER_H  не определен соответственно
                         // все что до #endif будет компилироваться
                          // при последующих выбрасывается 
#define HEADER_H  // здесь определяем при первом включении
 
#include <iostream>
extern void foo();
#endif
http://ru.wikipedia.org/wiki/Include_guard
разумеется файл HEADER.H должен быть присоединен в нескольких файлах, иначе смысла в этом изврате нет
в VS20xx уже используется
#pragma once
http://ru.wikipedia.org/wiki/Pragma_once
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 01:41     Как сделать чтобы функция была видна из .cpp файла? #25
ValeryS, прости, но ты не объяснил почему именно #endif должен стоять в конце файла. Всё что ты скаазал никак не идет в разрез с тем что у меня написано. В моем примере #endif завершает #ifndef. Дальше трансляция идет "построчно". Я что - то не понимаю.

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
в VS20xx уже используется
я рад .

Добавлено через 3 минуты
нет. я понимаю что возможно libc *.h никогда не открывались и не читались чтобы подобное заявить. Мне интересно откуда такая уверенность что так дОлжно. Дай мне источник и я заткнусь.

Еще я могу предположить что моя редакция противоречит именно c++ нотации (я слабо с ней знаком), тогда мне так же итересно знать где и почему я не прав.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 01:55     Как сделать чтобы функция была видна из .cpp файла? #26
Цитата Сообщение от alkagolik Посмотреть сообщение
почему именно #endif должен стоять в конце файла.
Стоять должен там, где нужно. Если выражение #ifndef HEADER_H истинно, то будет компилироваться то, что находится между #ifndef и #endif, если нет, то этот участок кода игнорируется.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
22.08.2012, 02:01     Как сделать чтобы функция была видна из .cpp файла? #27
alkagolik,
извини не понял вопроса

Не по теме:

то то я думаю с такой репутацией , а таких вещей не знает
ну ладно пускай начинающие прочтут, авось узнают


Цитата Сообщение от alkagolik Посмотреть сообщение
В моем примере #endif завершает #ifndef. Дальше трансляция идет "построчно". Я что - то не понимаю.
в твоем примере это вообще не нужно
ты обрамляешь макрос, зачем?
C++
1
2
3
#ifndef HEADER_H
#define HEADER_H
#endif
Цитата Сообщение от alkagolik Посмотреть сообщение
Мне интересно откуда такая уверенность что так дОлжно
так делают.
а зачем я тебе привел ссылки
а то что ты написал, я не понял зачем здесь условная компиляция?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 02:21     Как сделать чтобы функция была видна из .cpp файла? #28
Цитата Сообщение от ValeryS Посмотреть сообщение
в твоем примере это вообще не нужно
ты обрамляешь макрос, зачем?
а зачем писать так? а ведь пишут...
C
1
2
3
#if 0
...
#endif
Цитата Сообщение от ValeryS Посмотреть сообщение
зачем здесь условная компиляция?
Я говорю компилятору что if not defined FILE_H define FILE_H. Дальше в FILE_H выполняются инструкции, но если он not defined то эти инструкции молча канут в лету. А я оказывается предусмотрел и предупредил компилятор что if not defined FILE_H define FILE_H.
Цитата Сообщение от alsav22 Посмотреть сообщение
Стоять должен там, где нужно.
где написано? дай источник.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 02:31     Как сделать чтобы функция была видна из .cpp файла? #29
Цитата Сообщение от alkagolik Посмотреть сообщение
где написано? дай источник.
Герберт Шилдт. Полный справочник по C++.
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?  
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
22.08.2012, 02:31     Как сделать чтобы функция была видна из .cpp файла? #30
Цитата Сообщение от alkagolik Посмотреть сообщение
Я говорю компилятору что if not defined FILE_H define FILE_H. Дальше в FILE_H выполняются инструкции, но если он not defined то эти инструкции молча канут в лету. А я оказывается предусмотрел и предупредил компилятор что if not defined FILE_H define FILE_H.
Переведи


твой код
C++
1
2
3
#ifndef HEADER_H
#define HEADER_H
#endif
по русски будет звучать так
если макрос HEADER_H не определен определить его
и ВСЕ никаких больше действий
вот я и спрашиваю Зачем?
переопределения никто не отменял
и твой код аналогичен
C++
1
#define HEADER_H
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
22.08.2012, 02:38     Как сделать чтобы функция была видна из .cpp файла? #31
Цитата Сообщение от alkagolik Посмотреть сообщение
а зачем писать так? а ведь пишут...
Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
2
3
#if 0
...
#endif
ты не поверишь, это один из способов выбросить из компиляции участок кода
некоторые комментируют, а некоторые вот так выбрасывают

C++
1
2
3
#if 0
int m=fn();
#endif
равно
C++
1
//int m=fn();
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 02:39     Как сделать чтобы функция была видна из .cpp файла? #32
Цитата Сообщение от ValeryS Посмотреть сообщение
Зачем?
Дальше-то это можно использовать, но, в данном примере, задача ведь совсем другая. Не пойму о чём alkagolik спорит? Можно написать и так, как он написал, и потом использовать, но для данного примера как? Задача была, чтобы участок кода от #ifndef и до #endif был включён в программу один раз.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 02:52     Как сделать чтобы функция была видна из .cpp файла? #33
alsav22, ну юморист. 1. Сначала в оригинале почитай. 2. О чем говорит твой скрин? НИАЧОМ.

Цитата Сообщение от ValeryS Посмотреть сообщение
по русски будет звучать так
если макрос HEADER_H не определен определить его
и ВСЕ никаких больше действий
вот я и спрашиваю Зачем?
переопределения никто не отменял
ок. а если в *.cpp или смежном *.h мы встретим такой участок?
C
1
2
3
4
5
6
7
8
9
#ifdef HEADER_H
    #define do { \
        ...\
    } while (0)
#else
    #define do { \
        ... \
    } while(0)
#endif
Цитата Сообщение от ValeryS Посмотреть сообщение
и твой код аналогичен
нет. не аналогичен. потому что "если не объявлен объявить", а не "объявить".
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 02:55     Как сделать чтобы функция была видна из .cpp файла? #34
Сначала в оригинале почитай.
Куда уж нам...

Цитата Сообщение от alkagolik Посмотреть сообщение
О чем говорит твой скрин? НИАЧОМ.
Загадками будете говорить или может объясните?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 03:00     Как сделать чтобы функция была видна из .cpp файла? #35
Цитата Сообщение от alsav22 Посмотреть сообщение
Загадками будете говорить или может объясните?
в том то и дело что мне нечего объяснять. ты уж прости если огорчил. А вот я как раз требую объяснений по вопросу в том где я не прав, почему и как правильно.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 03:11     Как сделать чтобы функция была видна из .cpp файла? #36
Цитата Сообщение от alkagolik Посмотреть сообщение
почему и как правильно.
Это тоже не то ? Л.Лафоре. ООП в С++.
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?  
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 03:17     Как сделать чтобы функция была видна из .cpp файла? #37
Это? Стивен Прата. Язык Программирования C++. Лекции И Упражнения.
Всё не то?
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?  
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 03:25     Как сделать чтобы функция была видна из .cpp файла? #38
Цитата Сообщение от alsav22 Посмотреть сообщение
Всё не то?
почему же не то? то. Только я не вижу расхождений с приведенным мной примером.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 03:32     Как сделать чтобы функция была видна из .cpp файла? #39
Пример этот? Или какой-нибудь другой?
C++
1
2
3
4
5
6
7
#ifndef HEADER_H
#define HEADER_H
#endif
 
#include <iostream>
 
extern void foo();
Добавлено через 4 минуты
Цитата Сообщение от alkagolik Посмотреть сообщение
вот я как раз требую объяснений по вопросу в том где я не прав, почему и как правильно.
Если хотите, давайте остановимся на вопросе: "...и как правильно." Правильно что? О чём, вообще, разговор? Может мы о разном?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2012, 03:51     Как сделать чтобы функция была видна из .cpp файла?
Еще ссылки по теме:

Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат? C++
C++ Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна
Экземпляр в хедере. Обьект в меин. Функция в cpp модифицирует поле обьекта. Как сделать? C++

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 03:51     Как сделать чтобы функция была видна из .cpp файла? #40
alsav22, может и о разном. Только у тебя в #26 цитата:
Стоять должен там, где нужно.
вот мне и интересно, а где же нужно, и где эти жесткие ограничения? или среднестатистический плюсовик пишет исключительно по чьей-то инструкции? (только для себя конечно). То что я написал никак не противоречит стандартам, а мне начинают втирать что "вот так нужно!". И вообще тот кто изначально втер сопит преспокойно.
Я наверное сейчас бухать пойду, так что если есть вопросы - задавай.

Добавлено через 6 минут
Цитата Сообщение от defer Посмотреть сообщение
тут extern не нужен
Code-Blocks
не потому что codeblocks, а потому что c++
Yandex
Объявления
22.08.2012, 03:51     Как сделать чтобы функция была видна из .cpp файла?
Закрытая тема Создать тему
Опции темы

Текущее время: 10:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru