Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/532: Рейтинг темы: голосов - 532, средняя оценка - 4.77
9 / 9 / 8
Регистрация: 24.10.2013
Сообщений: 215

Ошибка "undefined reference to"

26.09.2014, 02:12. Показов 113270. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Пишу набор функций, состоящих из двух файлов: fileio.h и fileio.cpp
Попытался подключить это к main.cpp, и использовать makefile, вылезла ошибка:
Code
1
main.cpp:(.text+0x2a): undefined reference to `int* finput<int>(int*, unsigned long*, char*, bool)'
Вот как выглядит заголовочный файл:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <fstream>
using namespace std;
 
template <typename type>
type* finput(type*,unsigned long*,char*,bool f=0);
template <typename type>
type* finput(type*,unsigned long,char*,bool f=0);
 
template <typename type>
unsigned char foutput(type*,unsigned long,char*,bool f=0);
unsigned char foutput(char*,unsigned long,char*,bool f=0);
И файл с функциями:
C++
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "fileio.h"
 
template <typename type>
type* finput(type* array,unsigned long* count,char* path,bool f)
//Функция чтения неизвестного количества однотипных данных из файлов
{
    if (f) //Если двоичный файл
    {
        ifstream file(path,ios::binary|ios::ate);//Открытие бинарного файла с конца
        if (file) //Если файл открылся
        {
            if (file.tellg()%sizeof(type)) return (type*)1; //Файл повреждён
            *count=file.tellg()/sizeof(type);//Определение количества элементов
            array=new type[*count];//Выделение памяти под элементы
            file.clear();
            file.seekg(0);//Перевод маркера в начало файла
            file.read((char*)array,*count*sizeof(type));//Чтение
            return array;
        }
        else return (type*)0; //Если файл не открылся
    }
    else //Если файл текстовый
    {
        ifstream file(path);//Открытие файла
        if (file)//Если файл открылся
        {
            *count=0;
            for (register type i;!file.eof();)
                if (file>>i) (*count)++;
                else
                    if (!file.eof()) return (type*)1;//Файл повреждён
            file.clear();
            file.seekg(0);
            array=new type[*count];
            for(register unsigned long i=0;i<*count;i++)
                file>>array[i];
            return array;
        }
        else return (type*)0;//Файл не открылся
    };
};
template <typename type>
type* finput(type* array,unsigned long count,char* path,bool f)
//Функция для чтения определённого количество однотипных данных из файлов
{
    if (f)//Если бинарный файл
    {
        ifstream file(path,ios::binary|ios::ate);
        if (file)//Если файл открылся
        {
            if (file.tellg()<count*sizeof(type)) return (type*)1;//Повреждённый файл
            file.clear();
            file.seekg(0);
            array=new type[count];
            file.read((char*)array,count*sizeof(type));//Чтение
            return array;
        }
        else return 0;//Если файл не открылся
    }
    else//Если текстовый файл
    {
        ifstream file(path);
        if (file)//Если файл открылся
        {
            array=new type[count];
            for(register unsigned long i=0;i<count;i++)
                if (!(file>>array[i]))//Файл повреждён
                {
                    delete []array;
                    return (type*)1;
                } ;
            return array;
        }
        else return (type*)0;//Если файл не открылся
    };
};
 
template <typename type>
unsigned char foutput(type* array,unsigned long count,char* path,bool f)
//Функция для записи в файл данных
{
    if (f) //Для бинарного файла
    {
        ofstream file(path,ios::binary);
        if (file)
        {
            file.write((char*)array,sizeof(type)*count);
            return 1;//Файл открылся и записан удачно
        }
        else return 0;//Файл не открылся
    }
    else //Для текстового файла
    {
        ofstream file(path);
        if (file)
        {
            for(register unsigned i=0;i<count;i++)
                file<<array[i]<<' ';
            return 1;//Файл открылся и записан удачно
        }
        else return 0;//Файл не открылся
    };
};
unsigned char foutput(char* array,unsigned long count,char* path,bool f)
//Функция для записи в файл данных типа char
{
    if (f) //Для бинарного файла
    {
        ofstream file(path,ios::binary);
        if (file)
        {
            file.write((char*)array,sizeof(char)*count);
            return 1;//Файл открылся и записан удачно
        }
        else return 0;//Файл не открылся
    }
    else //Для текстового файла
    {
        ofstream file(path);
        if (file)
        {
            for(register unsigned i=0;i<count;i++)
                file<<array[i];
            return 1;//Файл открылся и записан удачно
        }
        else return 0;//Файл не открылся
    };
};
Makefile написал вручную, выглядит так:
Code
1
2
3
4
5
6
7
8
9
10
all: main
 
main: main.o fileio.o
    g++ main.o fileio.o -o main
 
main.o: main.cpp
    g++ -c main.cpp
 
fileio.o: fileio.h fileio.cpp
    g++ -c fileio.h fileio.cpp
В чём моя ошибка?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.09.2014, 02:12
Ответы с готовыми решениями:

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

Ошибка undefined reference to
При сборке выбивает ошибку: undefined reference to `Atom:: DoBCC(float, int, int, int)'. Ткните носом, пожалуйста, где ошибка. Заранее...

Ошибка `undefined reference to`
Выскакивает вот такая вот ошибка: undefined reference to ?Подскажите, пожалуйста, как это исправить? И еще рядом с file.h находится...

34
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2014, 20:43
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от taras atavin Посмотреть сообщение
Уверен?
Абсолютно.
Миниатюры
Ошибка "undefined reference to"  
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.09.2014, 21:13
Ну так и есть. Переводчик. В английском могут быть свои нюансы. Или кнопки на клаве ключами зовутся?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2014, 21:18
Цитата Сообщение от taras atavin Посмотреть сообщение
Ну так и есть. Переводчик. В английском могут быть свои нюансы.
Что есть? Ну, и как ты это переводишь?
"... the result is termed an instantiation of the template."
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.09.2014, 21:22
Есть такой метлургический агрегат, называется ladle-furnace. Furnace по-русски печь, ladle - ковш. Но ladle-furnace по-русски агрегат внепечной обработки стали, а вовсе не печь. И если вдруг встречается термин "печь-ковш" (по-русски), то можно быть уверенным, что это последствия перевода с английского.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2014, 21:24
Цитата Сообщение от taras atavin Посмотреть сообщение
И если вдруг встречается термин печь-ковш (по-русски), то можно быть уверенным, что это последствия перевода с английского.
Ты это как переводишь?
"... the result is termed an instantiation of the template."
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
26.09.2014, 21:34
Аналогично арбревиатура CSPiLM - результат кривого перевода с русского. АКОСвК, агрегат комплексной обработки стали в ковше. По-русски это правильно, перевели на английский, получилось compex style process in ladle mashine, CSPiLM. Но по-английски это не правильно. По-английски этот агрегат - вид печи, а именно ladle-furnace, печь-ковш.

Добавлено через 10 минут
Что самое интересное, на самом деле данный агрегат - это именно печь, но надеваемая на ковш сверху, то есть печь-крышка. Но так не называется.
0
26.09.2014, 21:41

Не по теме:

Понятно... Спёкся.

0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
26.09.2014, 21:47
alsav22, словосочетание "экземпляр шаблона" звучит просто нелепо. Первый же онлайн словарь (не переводчик) выдал: "instantiation - (C++) реализация (код, генерируемый при вызове шаблонной функции (templated function) для конкретного набора типов входных параметров)"

Не по теме:

Вы часто переводами занимаетесь?

0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.09.2014, 21:52
Цитата Сообщение от КОП Посмотреть сообщение
Вы часто переводами занимаетесь?
Перевода из киниги недостаточно? Давайте заканчивать пустой разговор. instantiation of the template, переводите, как хотите.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
26.09.2014, 22:23
Цитата Сообщение от alsav22 Посмотреть сообщение
Перевода из книги недостаточно?
перевод из книги не является истиной в последней инстанции
а что если его поставить против перевода из словаря, кому верить?
В моем понимании компилятор на основе шаблона генерирует реализацию функции (конкретизация или инстанцирование тоже сойдет). Но "экземпляр шаблона" режет слух
Ну и на вопрос вы не ответили)
Цитата Сообщение от alsav22 Посмотреть сообщение
Давайте заканчивать пустой разговор. instantiation of the template, переводите, как хотите.
Вынужден согласиться. Главное, что говорим об одном и том же, а если большинство людей говорит экземпляр, то так тому и быть, язык же не static.
0
9 / 9 / 8
Регистрация: 24.10.2013
Сообщений: 215
27.09.2014, 01:12  [ТС]
Так что же делать тогда? Откуда такая ошибка? У меня нарушаются где-то правила или нет? Я попробовал без makefile и просто в конец fileio.h заинклюдил fileio.cpp, и всё работает. У меня geany, работающий на g++.
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
27.09.2014, 03:06
Ryder95, что-то я не понял, работает код или нет?
Реализацию шаблонов вынести в .h и нет проблем. В .срр можно описать реализацию для какого- либо конкретного типа, если ее надо скрыть или если она должна отличаться от всех остальных.
(Когда вы инклудите .срр вы по сути неявно выполняете то что я написал в первом предложении.)

Добавлено через 17 секунд
Ryder95, что-то я не понял, работает код или нет?
Реализацию шаблонов вынести в .h и нет проблем. В .срр можно описать реализацию для какого- либо конкретного типа, если ее надо скрыть или если она должна отличаться от всех остальных.
(Когда вы инклудите .срр вы по сути неявно выполняете то что я написал в первом предложении.)
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.09.2014, 03:33
Цитата Сообщение от Ryder95 Посмотреть сообщение
Так что же делать тогда?
Цитата Сообщение от КОП Посмотреть сообщение
что-то я не понял,
Я тоже не понял: код в 9-ом посте для кого выложен?

Не по теме:

Цитата Сообщение от КОП Посмотреть сообщение
если большинство людей говорит экземпляр, то так тому и быть
Понятия не имею, как говорит большинство людей. Сам учился по Прата, поэтому для меня, эеземпляр шаблона, звучит вполне нормально. В других местах пишут: конкретизация, специалазация, реализация, инстанцирование. Кому не нравится экземпляр, есть из чего выбрать. Заметил, что проффесионалы, здедсь, на форуме, предпочитают употреблять, без перевода: инстанс, инстанцирование.
Цитата Сообщение от КОП Посмотреть сообщение
Ну и на вопрос вы не ответили)
На какой? Часто ли занимаюсь переводами? Не понял, о чём вопрос.

0
27.09.2014, 03:47

Не по теме:

Цитата Сообщение от alsav22 Посмотреть сообщение
Понятия не имею, как говорит большинство людей.
я тоже понятия не имею, написал от балды в том смысле, что пусть останется то слово, которое приживется
Цитата Сообщение от alsav22 Посмотреть сообщение
Заметил, что проффесионалы, здедсь, на форуме, предпочитают употреблять, без перевода: инстанс, инстанцирование.
возможно, это был бы наиболее правильный вариант "перевода".
Цитата Сообщение от alsav22 Посмотреть сообщение
а какой? Часто ли занимаюсь переводами?
он самый, переформулирую: часто ли приходится переводить с других языков.

Но уже по сути неважно, полагаю, мы пришли к общему мнению:). Кому как нравится, тот так и называет (благо путаницы нет ни в одном из вариантов)

0
27.09.2014, 03:51

Не по теме:

Цитата Сообщение от КОП Посмотреть сообщение
возможно, это был бы наиболее правильный вариант "перевода".
Мудрый вариант. :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.09.2014, 03:51

Ошибка undefined reference to
Взял пример из учебника С++ изнутри (Вайнер), но при попытке скомпилировать программу, возникают ошибки (gcc компилятор) ...

Ошибка . undefined reference to
При компиляции вылетает указанная ниже ошибка. В чем может быть проблем? Linux Часть кода #include &lt;pulse/simple.h&gt; #include...

Ошибка undefined reference to
main.cpp #include &lt;locale&gt; #include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &quot;Class.h&quot; using namespace std; int main() { ...

Ошибка undefined reference
Вот такая функция: void InitFMOD(){ FMOD_RESULT result; FMOD::System *system; result =...

ошибка undefined reference to `_imp___ZN2sf5Image12loadFromFileERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE'|
Привет! Такая проблема: подключил sfml к codeblocks и скопировал тестовый код, все работает. но когда пытаюсь загрузить изображение выдает...


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

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru