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

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

Восстановить пароль Регистрация
 
fised
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 15
30.01.2016, 18:28     Проект из нескольких файлов #1
Всем привет. Столкнулся с проблемой.
Использую 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, вроде все должно работать
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2016, 18:28     Проект из нескольких файлов
Посмотрите здесь:

C++ чтение из нескольких файлов
C++ Подключение файлов в проект
Компиляция нескольких файлов C++
Чтение нескольких файлов C++
Компиляция нескольких файлов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nd2
1019 / 758 / 255
Регистрация: 29.01.2016
Сообщений: 2,370
30.01.2016, 18:35     Проект из нескольких файлов #2
В каком-нибудь .cpp, foo нужно объявить без extern (определить, т.е., выделить память).
hoggy
5114 / 2115 / 403
Регистрация: 15.11.2014
Сообщений: 4,800
Завершенные тесты: 1
30.01.2016, 18:37     Проект из нескольких файлов #3
Цитата Сообщение от fised Посмотреть сообщение
int main()
{
* * foo = 7;

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

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

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

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

C++ Проект из нескольких файлов
Проект из нескольких файлов C++
C++ Как скомпилировать проект из нескольких файлов?

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

Или воспользуйтесь поиском по форуму:
fised
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 15
30.01.2016, 23:11  [ТС]     Проект из нескольких файлов #7
Спасибо, стало яснее)
Можно закрывать.
Yandex
Объявления
30.01.2016, 23:11     Проект из нескольких файлов
Ответ Создать тему
Опции темы

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