Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
1

Собрать многофайловый проект в Turbo C++ (ошибка Linker error Undefined symbol f (int) in module)

30.07.2014, 23:02. Просмотров 1390. Ответов 10
Метки нет (Все метки)

Столкнулся с проблемой, сам не ожидал.
Вот три файла
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream.h>
#include <conio.h>
#include "menu.h"
 
int main(){
clrscr();
int y;
cin>>y;
cout<<f(y);
return 0;
}
menu.cpp
C++
1
2
3
4
#include "menu.h"
int f(int n){
    return n+5;
}
menu.h
C++
1
2
3
4
#ifndef _MENU_H
#define _MENU_H
int f(int n);
#endif
Написано в Turbo C++
Жму ctrl+F9
На этапе Linging main.exe появляется ошибка
Linker error Undefined symbol f(int) in module main.cpp
Почему так, где я допустил ошибку. Подскажите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2014, 23:02
Ответы с готовыми решениями:

Linker Error: Undefined symbol _getimage in module
Что это за ошибка и как ее исправить? Linker Error: Undefined symbol _getimage in module...

Linker Error: undefined symbol
Прога компилируется без ошибок, когда запускается, то появляется 10 ошибок. И все одного характера...

Странная ошибка: [Linker error] undefined reference to `__dyn_tls_init_callback' [Linker error] undefined reference to ld returned 1 exit status
Здравствуйте. Вот недавно начал изучать книгу &quot;С++ для чайников&quot; Стефан Р. Девис 4-е издание. И...

Linker Error: Undefined symbol istream..
Linker Error: Undefined symbol istream::getline(char near*, &gt; int, unsigned char) in module...

10
5467 / 4862 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2014, 23:12 2
Цитата Сообщение от dima-dima Посмотреть сообщение
Почему так
Линкер не видит реализацию функции (файл menu.cpp).
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
30.07.2014, 23:14  [ТС] 3
А почему не видит, как это исправить?
0
5467 / 4862 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2014, 23:15 4
Цитата Сообщение от dima-dima Посмотреть сообщение
А почему не видит, как это исправить?
Если бы это был не Turbo C++, то я сказал бы: нужно добавить файл menu.cpp в проект.
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
30.07.2014, 23:17  [ТС] 5
А в какое среде можно было бы применить вашу рекомендацию.
Тем не менее, такая структура проекта как у меня должна работать в теории. Не понимаю, почему она не работает.
0
2528 / 1188 / 357
Регистрация: 30.11.2013
Сообщений: 3,817
30.07.2014, 23:17 6
Попробуй оставить в заголовке только
C++
1
int f(int n);
0
5467 / 4862 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2014, 23:24 7
Цитата Сообщение от dima-dima Посмотреть сообщение
А в какое среде можно было бы применить вашу рекомендацию.
В разных. В студии, code blocks, dev c++...
Цитата Сообщение от dima-dima Посмотреть сообщение
Тем не менее, такая структура проекта как у меня должна работать в теории. Не понимаю, почему она не работает.
Совершенно не знаю, что это за среда: Turbo C++, поэтому ничего не могу сказать.

Добавлено через 2 минуты
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Попробуй оставить в заголовке только
С заголовком там, по-моему, всё нормально, иначе до линкера бы не дошло.
0
1 / 1 / 3
Регистрация: 27.11.2012
Сообщений: 146
30.07.2014, 23:25  [ТС] 8
Вообще помогло вставить в main.cpp
C++
1
#include "menu.cpp"
Уж не знаю, насколько это верно и не появится ли проблем потом.
0
5967 / 2094 / 736
Регистрация: 10.12.2010
Сообщений: 5,914
Записей в блоге: 3
01.08.2014, 12:26 9
Цитата Сообщение от dima-dima Посмотреть сообщение
#ifndef _MENU_H
#define _MENU_H
int f(int n);
#endif
C++
1
2
3
4
#ifndef _MENU_H
#define _MENU_H
extern int f(int n);
#endif
0
3143 / 2616 / 697
Регистрация: 25.03.2012
Сообщений: 9,409
Записей в блоге: 1
Завершенные тесты: 1
01.08.2014, 15:14 10
Цитата Сообщение от dima-dima Посмотреть сообщение
Уж не знаю, насколько это верно и не появится ли проблем потом.
То, что это работает не значит, что это верно. Изначальный вариант был правильный. Чтобы он работал, нужно по нормальному создать проект. Чтобы это сделать по нормальному нужно выкинуть Турбо си нафиг. По-хорошему, это нужно было сделать изначально, вне зависимости от того, будешь ты пользоваться проектами или нет.

Добавлено через 1 минуту
Цитата Сообщение от HighPredator Посмотреть сообщение
extern int f(int n);
разве extern обязательно применять к функциям?
0
5967 / 2094 / 736
Регистрация: 10.12.2010
Сообщений: 5,914
Записей в блоге: 3
01.08.2014, 15:40 11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
разве extern обязательно применять к функциям?
Вообще нет, но исходя из фактов:
а) тс имеет дело с архаичным турбо цпп
б) фиг его знает как там настроен линкер
имхо имеет смысл ему сказать чтобы точно искал реализацию в другой единице трансляции.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2014, 15:40

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

[Linker error] undefined reference to `sterling(int, int, int)'
#include &lt;iostream&gt; using namespace std; int sterling(int,int,int); int sterling(int,int); int...

Ошибка [Linker error] undefined reference to `Vector::Vector(int)'
Добрый день. Делал по методички, и почему-то валятся ошибки... файл lab9_main.cpp #include...

Что за ошибка(Linker error: Undesined symbol)
Linker error: Undesined symbol proizv (float near*near*, float near*near*, int, float near*near*)...

Ошибка [Linker error] undefined reference to `__dyn_tls_init_callback'
Вот такие ошибки появляются : Ошибка undefined reference to `__dyn_tls_init_callback' ...


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

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

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