Форум программистов, компьютерный форум 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++ как сделать чтобы функция возвращала массив?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
22.08.2012, 03:58     Как сделать чтобы функция была видна из .cpp файла?
  #41

Не по теме:

Цитата Сообщение от alkagolik Посмотреть сообщение
Стоять должен там, где нужно.
Тут я не имел ввиду какие-то инструкции. Имелось ввиду, как нужно тому, кто код пишет. Я же дальше написал, что можно написать и по вашему, и использовать это в программе. Ничему ваш код не противоречит. Просто разговор о другом зашёл, а именно: как избежать многократного включения заголовочного файла (и ТС тут не причём, у него причина совсем в другом была). Как использовать ваш код для решения именно этой задачи, я не пойму. А в остальном, хозяин - барин.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 04:12     Как сделать чтобы функция была видна из .cpp файла? #42
Цитата Сообщение от ValeryS Посмотреть сообщение
ты не поверишь, это один из способов выбросить из компиляции участок кода
некоторые комментируют, а некоторые вот так выбрасывают
ты не поверишь. это различие между релиз и дебаг компиляцией.

Добавлено через 13 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
Стоять должен там, где нужно.
Цитата Сообщение от alsav22 Посмотреть сообщение
Ничему ваш код не противоречит.
ну бывает. я понимаю, ошибочно включился в спор, сам не понял о чем спор и т.д. у всех бывает. Все мы не ангелы. Пойду бухать
alsav22
22.08.2012, 04:26
  #43

Не по теме:

Цитата Сообщение от alkagolik Посмотреть сообщение
Все мы не ангелы.
Это точно.

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 04:55     Как сделать чтобы функция была видна из .cpp файла? #44
ну вот еще напоследок
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
indicator@pc-host:~$ cat test.c 
#include "header.h" 
 
int main() {
#undef HEADER_H 
    foo();
#define HEADRE_H
    return 0;
}
indicator@pc-host:~$ cat foo.c 
#include "header.h"
 
void foo(){
    fprintf(stdout, "%s\n", "I'm foo");
}
indicator@pc-host:~$ cat header.h 
#ifndef HEADER_H
#define HEADER_H
#endif
#include <cstdio>
 
void foo();
indicator@pc-host:~$ g++ test.c foo.c 
indicator@pc-host:~$ ./a.out 
I'm foo
indicator@pc-host:~$
данная констукция демострирует что нам как бэ по хер и мы все равно дополняем свой код библиотеками cstdio.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
22.08.2012, 19:20     Как сделать чтобы функция была видна из .cpp файла? #45
alkagolik, все элементарно. Есть у нас заголовочный файл с некой константой:
C++
1
2
3
// constant.h
 
const int constant = 0;
Теперь мы берем и включаем его два раза в исходный файл:
C++
1
2
3
4
5
// main.cpp
#include "constant.h"
#include "constant.h"
 
int main() { }
После препроцессирования получаем:
C++
1
2
3
4
5
6
// main.cpp
 
const int constant = 0;
const int constant = 0;
 
int main() { }
Как видим constant определена дважды, что нарушает One Definition Rule и о чем нам скажет компилятор.
Header guards решают эту проблему. Вот правильный Header guard:
C++
1
2
3
4
5
6
7
// constant.h
#ifndef CONSTANT_H
#define CONSTANT_H
 
const int constant = 0;
 
#endif
В ходе препроцессирования второго включения все расположенное между #ifndef .. #endif будет вырезано, т.к. CONSTANT_H будет определена в ходе обработки первого включения, т.е. мы получим:
C++
1
2
3
4
5
// main.cpp
 
const int constant = 0;
 
int main() { }
Как видим определение одно и все прекрасно компиляется.
Теперь твой вариант:
C++
1
2
3
4
5
6
// constant.h
#ifndef CONSTANT_H
#define CONSTANT_H
#endif
 
const int constant = 0;
Опять же препроцессор вырезает все между #ifndef .. #endif при обработке второго включения, но т.к. определение constant не находится между этим директивами оно успешно попадает в main.cpp второй вариант, тем сымым возвращая нас к исходной проблеме двух определений.
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
22.08.2012, 19:25     Как сделать чтобы функция была видна из .cpp файла? #46
У тебя какой компилятор?
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
22.08.2012, 21:45     Как сделать чтобы функция была видна из .cpp файла? #47
CyBOSSeR, взял и обломал всю малину. Такая баталия веселая была...
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
23.08.2012, 01:22     Как сделать чтобы функция была видна из .cpp файла? #48
Цитата Сообщение от alkagolik Посмотреть сообщение
Такая баталия веселая была...
Баталии хороши когда он полезны, а тут 3 страницы постов ниочем.
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
23.08.2012, 09:12  [ТС]     Как сделать чтобы функция была видна из .cpp файла? #49
Цитата Сообщение от !Андрей! Посмотреть сообщение
У тебя какой компилятор?
CobeBlocks 10.05
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
23.08.2012, 09:36     Как сделать чтобы функция была видна из .cpp файла? #50
Цитата Сообщение от Intel~lect Посмотреть сообщение
CobeBlocks 10.05
Это IDE, а компилятор какой-то gcc, в командной строке напишите g++ -v
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
23.08.2012, 09:50  [ТС]     Как сделать чтобы функция была видна из .cpp файла? #51
defer, Компилятор у меня вроде бы MinGW.

Не по теме:

Если честно, то во всех этих компиляторах я очень плохо разбираюсь

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2012, 10:24     Как сделать чтобы функция была видна из .cpp файла?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.08.2012, 10:24     Как сделать чтобы функция была видна из .cpp файла? #52
Цитата Сообщение от Intel~lect Посмотреть сообщение
Если честно, то во всех этих компиляторах я очень плохо разбираюсь
Для информации.
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?   Как сделать чтобы функция была видна из .cpp файла?  

Как сделать чтобы функция была видна из .cpp файла?  
Yandex
Объявления
23.08.2012, 10:24     Как сделать чтобы функция была видна из .cpp файла?
Закрытая тема Создать тему
Опции темы

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