Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
 Аватар для Intel~lect
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355

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

21.08.2012, 09:02. Показов 5959. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть 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()     // определение функции
{
   //...
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2012, 09:02
Ответы с готовыми решениями:

Как сделать так, чтобы если выбрал одного пользователя была видна кнопка, а если другого пользователя не видна
Как сделать так, чтобы если выбрал одного пользователя была видна кнопка, а если другого пользователя не видна.

Как сделать чтобы не была видна рубрика и все ее записи
Допустим создал я рубрику,сделал в ней записи и как сделать так чтобы ее не было видно в навигации сайта и админ панели?

Как сделать чтобы некоторые столбцы в JTable не редактировались и была видна шапка таблицы
Такие проблемы: 1. Не видна шапка таблицы. 2. Как сделать, чтобы некоторые столбики не можно было редактировать? 3. Как сделать,...

51
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
21.08.2012, 23:05
Студворк — интернет-сервис помощи студентам
Intel~lect, вот обещанные мной скрины Кодблокс(всё делается довольно просто)
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?  

Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?  
2
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
21.08.2012, 23:56
Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
2
3
4
5
#ifndef HEADER_H
#define HEADER_H
#endif
#include <iostream>
extern void foo();
extern не нужен. #endif должен быть в конце файла.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
22.08.2012, 01:12
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
extern не нужен. #endif должен быть в конце файла.
обоснуй. Про extern понял ранее, обоснуй #endif. Почему именно должен? Кто обяазал и где?
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
22.08.2012, 01:22
Цитата Сообщение от 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
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
22.08.2012, 01:41
ValeryS, прости, но ты не объяснил почему именно #endif должен стоять в конце файла. Всё что ты скаазал никак не идет в разрез с тем что у меня написано. В моем примере #endif завершает #ifndef. Дальше трансляция идет "построчно". Я что - то не понимаю.

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

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

Еще я могу предположить что моя редакция противоречит именно c++ нотации (я слабо с ней знаком), тогда мне так же итересно знать где и почему я не прав.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 01:55
Цитата Сообщение от alkagolik Посмотреть сообщение
почему именно #endif должен стоять в конце файла.
Стоять должен там, где нужно. Если выражение #ifndef HEADER_H истинно, то будет компилироваться то, что находится между #ifndef и #endif, если нет, то этот участок кода игнорируется.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
22.08.2012, 02:01
alkagolik,
извини не понял вопроса

Не по теме:

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


Цитата Сообщение от alkagolik Посмотреть сообщение
В моем примере #endif завершает #ifndef. Дальше трансляция идет "построчно". Я что - то не понимаю.
в твоем примере это вообще не нужно
ты обрамляешь макрос, зачем?
C++
1
2
3
#ifndef HEADER_H
#define HEADER_H
#endif
Цитата Сообщение от alkagolik Посмотреть сообщение
Мне интересно откуда такая уверенность что так дОлжно
так делают.
а зачем я тебе привел ссылки
а то что ты написал, я не понял зачем здесь условная компиляция?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
22.08.2012, 02:21
Цитата Сообщение от 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 Посмотреть сообщение
Стоять должен там, где нужно.
где написано? дай источник.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
22.08.2012, 02:31
Цитата Сообщение от 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
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 02:31
Цитата Сообщение от alkagolik Посмотреть сообщение
где написано? дай источник.
Герберт Шилдт. Полный справочник по C++.
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?  
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
22.08.2012, 02:38
Цитата Сообщение от alkagolik Посмотреть сообщение
а зачем писать так? а ведь пишут...
Цитата Сообщение от alkagolik Посмотреть сообщение
C++
1
2
3
#if 0
...
#endif
ты не поверишь, это один из способов выбросить из компиляции участок кода
некоторые комментируют, а некоторые вот так выбрасывают

C++
1
2
3
#if 0
int m=fn();
#endif
равно
C++
1
//int m=fn();
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 02:39
Цитата Сообщение от ValeryS Посмотреть сообщение
Зачем?
Дальше-то это можно использовать, но, в данном примере, задача ведь совсем другая. Не пойму о чём alkagolik спорит? Можно написать и так, как он написал, и потом использовать, но для данного примера как? Задача была, чтобы участок кода от #ifndef и до #endif был включён в программу один раз.
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
22.08.2012, 02:52
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 Посмотреть сообщение
и твой код аналогичен
нет. не аналогичен. потому что "если не объявлен объявить", а не "объявить".
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 02:55
Сначала в оригинале почитай.
Куда уж нам...

Цитата Сообщение от alkagolik Посмотреть сообщение
О чем говорит твой скрин? НИАЧОМ.
Загадками будете говорить или может объясните?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
22.08.2012, 03:00
Цитата Сообщение от alsav22 Посмотреть сообщение
Загадками будете говорить или может объясните?
в том то и дело что мне нечего объяснять. ты уж прости если огорчил. А вот я как раз требую объяснений по вопросу в том где я не прав, почему и как правильно.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 03:11
Цитата Сообщение от alkagolik Посмотреть сообщение
почему и как правильно.
Это тоже не то ? Л.Лафоре. ООП в С++.
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?  
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 03:17
Это? Стивен Прата. Язык Программирования C++. Лекции И Упражнения.
Всё не то?
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?  
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
22.08.2012, 03:25
Цитата Сообщение от alsav22 Посмотреть сообщение
Всё не то?
почему же не то? то. Только я не вижу расхождений с приведенным мной примером.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2012, 03:32
Пример этот? Или какой-нибудь другой?
C++
1
2
3
4
5
6
7
#ifndef HEADER_H
#define HEADER_H
#endif
 
#include <iostream>
 
extern void foo();
Добавлено через 4 минуты
Цитата Сообщение от alkagolik Посмотреть сообщение
вот я как раз требую объяснений по вопросу в том где я не прав, почему и как правильно.
Если хотите, давайте остановимся на вопросе: "...и как правильно." Правильно что? О чём, вообще, разговор? Может мы о разном?
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
22.08.2012, 03:51
alsav22, может и о разном. Только у тебя в #26 цитата:
Стоять должен там, где нужно.
вот мне и интересно, а где же нужно, и где эти жесткие ограничения? или среднестатистический плюсовик пишет исключительно по чьей-то инструкции? (только для себя конечно). То что я написал никак не противоречит стандартам, а мне начинают втирать что "вот так нужно!". И вообще тот кто изначально втер сопит преспокойно.
Я наверное сейчас бухать пойду, так что если есть вопросы - задавай.

Добавлено через 6 минут
Цитата Сообщение от defer Посмотреть сообщение
тут extern не нужен
Code-Blocks
не потому что codeblocks, а потому что c++
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.08.2012, 03:51

Как сделать чтобы в combobox по умолчанию была сразу видна определенная строка из списка?
как сделать чтобы в combobox по умолчанию была сразу видна определенная строка из списка? известно ее значение, но не порядковый номер в...

Как в windows7 сделать так,чтобы папка была видна,но ее никто кроме меня не мог удалить и скопировать???
Подскажите пожалуйста как в windows7 сделать так,чтобы папка была видна,но ее никто кроме меня не мог удалить и скопировать???

как сделать так, чтобы одна xp машина с одной картой была видна в сети под несколькими ip-адресами?
обычно у людей противоположная задача, ну а у меня такая. имеется одна машина, нужно на ней запустить несколько экземпляров приложения,...

Как объявить переменную так, чтобы она была видна в .h файле?
День всем добрый! Допустим, есть у меня код в главном .cpp файле: #include &quot;Windows.h&quot; #include &quot;my.h&quot; ...

Как объявить переменную, чтобы она была видна для нескольких функций?
У меня возникла проблема с переменными. В функции Button Click я создаю переменную string s = text1.tex; И у меня есть другая функция...


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

Или воспользуйтесь поиском по форуму:
40
Закрытая тема Создать тему
Новые блоги и статьи
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru