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

Undefined reference to 'vtable for Touch'

22.08.2019, 12:45. Показов 1431. Ответов 10
Метки нет (Все метки)

Я не понимаю, что я неправильно делаю

Input/InputDevice.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef INPUTDEVICE_HPP
#define INPUTDEVICE_HPP
 
class InputDevice {
    public:
      virtual ~InputDevice() {}
    
      virtual void update() = 0;
 
      virtual bool is_pressed() = 0;
};
 
#endif
Input/Touch.hpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef TOUCH_HPP
#define TOUCH_HPP
 
#include "InputDevice.hpp"
 
class Touch : public InputDevice {
    public:
      void update();
    
      bool is_pressed() {return pressed;}
    private:
      bool pressed;
};
 
#endif
Input/Touch.cpp
C++
1
2
3
4
5
#include "Touch.hpp"
 
void Touch::update(void) {
    pressed = true;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "Input/Touch.hpp"
 
#include <iostream>
 
int main() {
    Touch a;
    std::cout << a.is_pressed();
    a.update();
    std::cout << a.is_pressed();
}
Ошибки в прикрепленном изображении
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Миниатюры
Undefined reference to 'vtable for Touch'  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.08.2019, 12:45
Ответы с готовыми решениями:

undefined reference to `vtable for
Вылетает эта ошибка при компиляции вот этого класса: class BrassPlus : public AcctABC { private:...

[linker error] undefined reference to 'vtable for Car'
доброго времени вам. помогите, пожалуйста, с задачей разобраться. хочу сделать пример на паттерн...

Ошибка компиляции единого файла: undefined reference to `vtable for .'
Проблема при компиляции файла: prog.cpp:(.text.startup+0x42): undefined reference to `vtable for...

Ошибки underfined reference to parentClass::method и unerfined reference to vtable при линковке
При сборке компилятор выдает ошибки underfined reference to и unerfined reference to vtable. Есть...

10
Эксперт С++
8426 / 4099 / 894
Регистрация: 15.11.2014
Сообщений: 9,211
22.08.2019, 13:29 2
Цитата Сообщение от ELchemist Посмотреть сообщение
Я не понимаю, что я неправильно делаю
давай сначала очевидную ошибку исправим,
и там посмотрим?

у тебя в классе Touch отсутствует конструктор.
а значит булевый член pressed - не определен.
а значит - UB.

функция-член:
bool is_pressed() {return pressed;} возвращает фигню.

добавь конструктор:
C++
1
2
3
4
5
6
7
8
9
10
class Touch : public InputDevice {
    public:
      Touch():pressed(){}
    
      void update();
    
      bool is_pressed() {return pressed;}
    private:
      bool pressed;
};
и сделай ребилд.
1
6738 / 4537 / 1839
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
22.08.2019, 15:18 3
Лучший ответ Сообщение было отмечено ELchemist как решение

Решение

Цитата Сообщение от ELchemist Посмотреть сообщение
Я не понимаю, что я неправильно делаю
Скорее всего у тебя Touch.cpp либо не компилируется, либо надо переставить его пораньше в списке линкера.
1
2 / 2 / 0
Регистрация: 14.03.2018
Сообщений: 45
22.08.2019, 19:09  [ТС] 4
На содержимое классов не нужно обращать внимание - это все заглушки.

у тебя в классе Touch отсутствует конструктор.
а значит булевый член pressed - не определен.
а значит - UB.
Ну... А разве не создается конструктор по умолчанию, не?
В любом случае, не сработало - ошибки те же.

Добавлено через 9 минут
Скорее всего у тебя Touch.cpp либо не компилируется, либо надо переставить его пораньше в списке линкера
Я нашёл что-то вроде списка линкера и поставил touch.cpp пораньше. Это сработало. Но мне этот способ кажется не очень удобным. Может, можно как-то перестроить код? Кстати, если содержимое файла touch.cpp поместить в touch.hpp, то ошибок не возникает
0
15110 / 8110 / 1958
Регистрация: 30.01.2014
Сообщений: 13,782
22.08.2019, 19:51 5
Цитата Сообщение от ELchemist Посмотреть сообщение
Я нашёл что-то вроде списка линкера и поставил touch.cpp пораньше. Это сработало.
Покажите как вы вообще собираете вашу программу.

Добавлено через 52 секунды
Цитата Сообщение от ELchemist Посмотреть сообщение
В любом случае, не сработало - ошибки те же.
Когда вам советуют исправить ошибки, это не значит, что эти исправления должны как-то влиять на ваш вопрос. Вам просто советуют исправить ошибки.
0
6738 / 4537 / 1839
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
22.08.2019, 20:44 6
Цитата Сообщение от ELchemist Посмотреть сообщение
Я нашёл что-то вроде списка линкера и поставил touch.cpp пораньше. Это сработало. Но мне этот способ кажется не очень удобным. Может, можно как-то перестроить код? Кстати, если содержимое файла touch.cpp поместить в touch.hpp, то ошибок не возникает
Естественно, там не возникнет, можешь сделать так.
В gcc порядок линковки имеет значение.
0
2 / 2 / 0
Регистрация: 14.03.2018
Сообщений: 45
22.08.2019, 21:06  [ТС] 7
Покажите как вы вообще собираете вашу программу.
Вот так
0
Миниатюры
Undefined reference to 'vtable for Touch'  
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,517
22.08.2019, 23:55 8
Цитата Сообщение от ELchemist Посмотреть сообщение
Вот так
Это уже "исправленный" вариант. Как вы ее собирали изначально, когда была ошибка?
0
2 / 2 / 0
Регистрация: 14.03.2018
Сообщений: 45
23.08.2019, 08:05  [ТС] 9
Это уже "исправленный" вариант. Как вы ее собирали изначально, когда была ошибка?
Был выбран первый режим компиляции
0
С чаем беда...
Эксперт CЭксперт С++
9145 / 4664 / 1268
Регистрация: 18.10.2014
Сообщений: 10,517
23.08.2019, 08:28 10
Цитата Сообщение от ELchemist Посмотреть сообщение
Был выбран первый режим компиляции
Ну так в первом режиме компиляции в принципе не может быть программ, состоящих из нескольких файлов реализации. Вот и весь ответ на ваш вопрос. Никакого отношения ни к каким "порядкам линковки" это не имеет. Ваш Touch.cpp просто вообще никак нигде не участвовал.
0
2 / 2 / 0
Регистрация: 14.03.2018
Сообщений: 45
23.08.2019, 08:37  [ТС] 11
Я еще не сказал, если во втором режиме список файлов исходного кода начать с main.cpp, то появляются те же ошибки
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2019, 08:37

Странная ошибка: [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 `vtable for TLabel'
Добрый вечер . Помогите исправить ошибку . Пишу свою первую программу в Qt Creator , которая должна...

Undefined reference to `vtable for MClas'
Обнаглел настолько, что решил попробовать себя в самостоятельном творчестве И получил такую ошибку...

Q_OBJECT undefined reference to vtable
Не могу понять почему ругается компилер на виртуальные таблицы при добавлении макроса Q_OBJECT....


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

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

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