Важная информация
Показано с 1 по 2 из 2

Тема: С++, классы. Ошибка компиляции undefined reference метода класса

  1. #1 С++, классы. Ошибка компиляции undefined reference метода класса 
    Новичок
    Регистрация
    29.11.2017
    Сообщений
    7
    Сказал(а) спасибо
    8
    Поблагодарили 1 раз в 1 сообщении
    Заголовочный файл:
    C++ Code:
    1.  
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #include <iostream>
    5.  
    6. using namespace std;
    7.  
    8. class Tel
    9. {
    10. public:
    11. Tel(int, const char *, float);
    12.    void Print(void);
    13.    void Input(void);
    14. private:
    15. int Number;
    16. char Mark [10];
    17. float Summ;
    18. };
    19.  
    20. Tel::Tel(int Number, const char *Mark, float Summ)
    21. {
    22.   Tel::Number=Number;
    23.   strcpy(Tel::Mark, Mark);
    24.   Tel::Summ=Summ;
    25. }
    26.  
    27. void Tel::Print(void)
    28. {
    29.   cout<<Number<<" "<<Mark<<" "<<Summ<<" "<<endl;
    30. }
    31.  
    32. void Tel::Tel(void)
    33. {
    34.   cin>>Number>>Mark>>Summ;
    35. }

    Основной файл:
    C++ Code:
    1.  
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #include <iostream>
    5. #include "main.h"
    6.  
    7. int main()
    8. {
    9. Tel mobile(1, "Nokia N97", 19999.9);
    10. mobile.Print();
    11. Tel *mob2;
    12. mob2 = new Tel(2, "Samsung J3", 23599.9);
    13. mob2->Print();
    14. delete mob2;
    15. mob2->Input();
    16. mob2->Print();
    17. }


    Помогите, пожалуйста, разобраться. Компилятор выдаёт вот такие ошибки:
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Последний раз редактировалось rrrFer; 07.05.2018 в 10:23.
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для rrrFer
    Регистрация
    01.08.2013
    Сообщений
    561
    Сказал(а) спасибо
    34
    Поблагодарили 249 раз(а) в 164 сообщениях
    Причем тут структура классов не понятно. Ошибка в том, что тут ты записал тело конструктора класса Tel по умолчанию:

    C++ Code:
    1. void Tel::Tel(void) {
    2.   cin>>Number>>Mark>>Summ;
    3. }


    Но при описании класса ты не указал что есть такой конструктор.

    С другой стороны, конструктор не должен вообще иметь возвращаемого значения (даже void). Можно добавить в описание класса строку
    C++ Code:
    1. Tel();

    и убрать void и одна проблема решится. Но в конструкторе обращаться к потокам не стоит. В случае ошибки (исключения) у тебя программа сломается.

    С другой стороны тут:
    C++ Code:
    1. undefined reference to `Tel::Input()'

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

    Тут я подумал, что ты случайно вместо
    C++ Code:
    1. void Tel::Input(void) {
    2.   cin>>Number>>Mark>>Summ;
    3. }


    Написал
    C++ Code:
    1. void Tel::Tel(void) {
    2.   cin>>Number>>Mark>>Summ;
    3. }


    Исправил одно слово и твоя программа заработала. Только пытаться вызывать методы mob2 после освобождения памяти не стоит.
    [Ссылки могут видеть только зарегистрированные пользователи. ] // программирование на Prolog, Erlang, C++
    Ответить с цитированием  
     

  3. 3 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (07.05.2018), Free Admin (07.05.2018), Serpent (12.05.2018)

Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Как переделать рабочий код в классы
    от Mary Ustyantseva в разделе C/C++
    Ответов: 0
    Последнее сообщение: 16.03.2014, 19:08
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •