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

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

21.08.2012, 09:02. Показов 5592. Ответов 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,875
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,875
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,875
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,875
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
Закрытая тема Создать тему
Новые блоги и статьи
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru