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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fised
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 17
#1

Проект из нескольких файлов - C++

30.01.2016, 18:28. Просмотров 455. Ответов 6
Метки нет (Все метки)

Всем привет. Столкнулся с проблемой.
Использую codeblocks, совсем тривиальный пример.
Есть три файла use.cpp my.cpp my.h.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Файл my.cpp
#include "my.h"
#include <iostream>
 
using namespace std;
 
void print_foo()
{
    cout << foo;
}
 
void print(int i)
{
    cout << i;
}
C++
1
2
3
4
Файл my.h
extern int foo;
void print_foo();
void print(int);
C++
1
2
3
4
5
6
7
8
9
10
11
Файл use.cpp
#include "my.h"
 
int main()
{
    foo = 7;
    print_foo();
    print(99);
 
    return 0;
}
После запуска появляются две ошибки:

obj\Debug\\my.o In function `Z9print_foov':
...\my.cpp undefined reference to `foo' (9-ая строка)

obj\Debug\use.o In function `main':
...\use.cpp undefined reference to `foo' (6-ая строка)


В чем собственно проблема? Точнее понятно, что проблема связана с переменной foo, но я ведь объявил ее с extern`ом, присвоил значение в use, вроде все должно работать
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2016, 18:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проект из нескольких файлов (C++):

Проект из нескольких файлов - C++
Здравствуйте. Решая задачу на нахождение количества связных компонент графа решил вынести алгоритм поиска в ширину в отдельный файл....

Проект из нескольких файлов - C++
Выдает ошибку: error C3861: test: идентификатор не найден. и warning C4627: #include &quot;test.h&quot;: пропущен при поиске использования...

Как скомпилировать проект из нескольких файлов? - C++
Интересует компиляция данного проекта. Извините, если что-то не так |: Пункт 5.18. Правил: Запрещено помещать задания и тексты в виде...

Как правильно организовывать проект из нескольких файлов? - C++
В данный момент отрыл свой старый проект (и тогда был новичком и сейчас, два года не прогал). Проект крупный, написан ужасно и совсем...

Подключение файлов в проект - C++
Здравствуйте. Запутался немного с подключением файлов, подскажите как лучше организовать. Собственно прикладываю картинку со схемой...

Чтение из нескольких файлов - C++
Доброго времени суток. Подскажите как сделать чтобы программа считывала данные из нескольких текстовых файлов лежащих в 1 деректории....

6
nd2
2353 / 1943 / 681
Регистрация: 29.01.2016
Сообщений: 6,326
30.01.2016, 18:35 #2
В каком-нибудь .cpp, foo нужно объявить без extern (определить, т.е., выделить память).
0
hoggy
6672 / 2858 / 491
Регистрация: 15.11.2014
Сообщений: 6,378
Завершенные тесты: 1
30.01.2016, 18:37 #3
Цитата Сообщение от fised Посмотреть сообщение
int main()
{
* * foo = 7;

C++
1
2
3
int main()
{
    int foo = 7;
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
30.01.2016, 19:18 #4
hoggy, у ТС внешняя (глобальная) переменная. Её нужно определить, как уже сказал nd2, а не скрывать локальной.
0
fised
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 17
30.01.2016, 23:05  [ТС] #5
но я ведь определяю тип переменной в заголовочном файле "extern int foo;", а в use определяю ее как "foo = 7;". Есть и объявление переменной и ее определение.

Добавлено через 11 минут
К тому же, когда начинаю в main писать имя переменной, codeblocks автоматически подсвечивает "foo : int", то есть в main`е известен тип этой переменной, следовательно я могу ее определить целым значением, ведь так?

UPD. Как решить то я понял, в my.cpp просто перед определением написал "int foo" и все работает, но почему не работало до этого, для меня все еще не понятно)
0
nd2
2353 / 1943 / 681
Регистрация: 29.01.2016
Сообщений: 6,326
30.01.2016, 23:11 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от fised Посмотреть сообщение
в use определяю ее как "foo = 7;
Определение - это выделение памяти под переменную. А это присваивание, подразумевает, что память уже была выделена до этого.
Вот определение (без extern):
C++
1
int foo;
Сделать нужно в глобальной области, в каком-нибудь из .cpp.

Добавлено через 1 минуту
Цитата Сообщение от fised Посмотреть сообщение
К тому же, когда начинаю в main писать имя переменной, codeblocks автоматически подсвечивает "foo : int", то есть в main`е известен тип этой переменной, следовательно я могу ее определить целым значением, ведь так?
Нет. Подсвечивает потому, что видит объявление, из которого виден тип переменной.
0
fised
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 17
30.01.2016, 23:11  [ТС] #7
Спасибо, стало яснее)
Можно закрывать.
0
30.01.2016, 23:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2016, 23:11
Привет! Вот еще темы с ответами:

Компиляция нескольких файлов - C++
Создал проект на wxDevC++ таким образом: потом создал три файла в проекте: coordin.h #ifndef COORDIN_H_ #define COORDIN_H_...

Компиляция нескольких файлов - C++
Здравствуйте, есть программа состоящая из 4 cpp, необходимо ее собрать, попытался собрать с помощью MinGW(взял тут...

Чтение нескольких файлов - C++
Приветствую, уважаемые. Возникла небольшая проблемка, вот у меня есть некоторое количество файлов (чуть больше, чем до фига), и все их...

Затратность открытия нескольких файлов - C++
У меня есть набор файлов, которые надо объединять в один. Каждый файл делится на блоки, и, при слиянии, необходимо записать сначала первый...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru