Top.Mail.Ru
Ответы
Аватар пользователя
10лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

С++. Что означает ошибка: [Error] ld returned 1 exit status.

Пожалуйста, скажите, в чем дело. Я новичок в программировании, чтение форумов с советами посмотреть лог сборки ничего не дало. Ниже сообщение компилятора об ошибке в полном размере и текст программы. Вместо функций прототипы, т. к. объем сообщения не позволяет вместить. (Кстати, с закомментированными функциями выдает ту же ошибку.) Пожалуйста, объясните доступно, если не тяжело.

Сообщение:
C:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x811): undefined reference to `doubledec(char*)'
C:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x81f): undefined reference to `binary(char*)'
C:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x83b): undefined reference to `intdec(char*)'
C:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x849): undefined reference to `hexadec(char*)'
C:\Users\TATIANA\Desktop\Проги\collect2.exe[Error] ld returned 1 exit status

Текст программы:
#include
#include
#include //isdigit(), isxdigit()
#include //atoi()
#include //для функции gets()
using namespace std;

int empty_str (char *s); //ПРОВЕРЯЕТ, ПУСТА СТРОКА ИЛИ НЕТ.
void format_cmd (char *s); //КОРРЕКТИРУЕТ ФОРМАТ КОМАНДЫ ДЛЯ СРАВНЕНИЯ С ЗНАЧЕНИЯМИ ИЗ ПЕРЕЧИСЛЕНИЯ.
void doubledec (char *s); //РАБОТА С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ. ПРОВЕРЯЕТ, ЧТО ЭТО DOUBLE.
void intdec (char *s); //РАБОТА С ДЕСЯТИЧНЫМИ ЧИСЛАМИ. ПРОВЕРЯЕТ, ЧТО ЭТО ДЕС. ЧИСЛО.
void binary (char *s); //РАБОТА С ДВОИЧНЫМИ ЧИСЛАМИ. ПРОВЕРЯЕТ, ЧТО ЭТО ДВ. ЧИСЛО.
void octal (char *s);
void hexadec (char *s);//РАБОТА С ЦЕЛЫМИ ШЕСТНАДЦАТЕРИЧНЫМИ ЧИСЛАМИ. ПРОВЕРЯЕТ, ЧИСЛО ЛИ ЭТО.
int is_state_change (char *s); //ПРОВЕРЯЕТ, ЕСТЬ ЛИ КОМАНДА СМЕНЫ СОСТОЯНИЯ.

enum num_sys {dbl, bin, oct, dec, hex} state; //Команды для смены СС.
char state_name [][5] = {"dbl", "bin", "oct", "dec", "hex"};

class calculator {
public:
calculator (); //конструктор
double current_value;//Текущее значение

};
calculator::calculator(){
current_value=0;
}

int main(){
num_sys state = dbl;
calculator calc;
char str [100];

while (1) {
cout<<"\nEnter number or command:\n";
gets(str);
if (empty_str(str)) { //Если строка пуста.
cout<<"\nEnter something more intelligent."; continue;
}
format_cmd (str);//Корректирует формат введенных данных.
if (!strcmp(str, "exit")) break;

//ВОЗВРАЩАЕТ i - НОМЕР константы в перечислении.
if (is_state_change (str) !=-1) {
state = (num_sys) is_state_change (str);
};
//Вызываем функцию по проверке правильности ввода числа, в зависимости от значения переменной state (текущей СС).
switch (state) {
case '0': doubledec (str);
break;
case '1': binary (str);
break;
case '2': octal (str);
break;
case '3': intdec (str);
break;
case '4': hexadec (str);
break;
//default: ;

}

}
return 0;
}

Дополнен

Почему-то заголовочные файлы не скопировались. На самом деле так:
#include
#include
#include //isdigit(), isxdigit()
#include //atoi()
#include //äëÿ ôóíêöèè gets()
using namespace std;

Дополнен

Да что ж такое. Это в это окно почему-то не вставляются.
#include //
#include //
#include //isdigit(), isxdigit()
#include //atoi()
#include //äëÿ ôóíêöèè gets()
using namespace std;

По дате
По рейтингу
Аватар пользователя
Новичок
10лет

Дмитрий правильно описал причину, но решение неправильно. Надо определить сами функции, а не только дать их прототипы.

Аватар пользователя
Просветленный
10лет

Комппиллятор не знает где искать все эти функии
:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x811): undefined reference to `doubledec(char*)'
C:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x81f): undefined reference to `binary(char*)'
C:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x83b): undefined reference to `intdec(char*)'
C:\Users\TATIANA\AppData\Local\Temp\ccKtnbxh.oe4.cpp:(.text+0x849): undefined reference to `hexadec(char*)'
Подключи правильно заголовочные файлы и все будет нормально.