Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 16

Ошибки underfined reference to parentClass::method и unerfined reference to vtable при линковке

21.10.2015, 23:26. Показов 2144. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При сборке компилятор выдает ошибки underfined reference to и unerfined reference to vtable. Есть базовый класс, два наследуемых от него и тестирующая программа.

Базовый класс ConfigNodeBase:

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
#ifndef CONFIGBASE_H_
#define CONFIGBASE_H_
#include <sstream>
#include <stdint.h>
#include <fstream>
#include <cstring>
#include <stdio.h>
#include <memory>
#include <map>
#include <vector>
 
struct  ConfigNode;
 
typedef std::shared_ptr<std::multimap<ConfigNode*,ConfigNode*> > ConfigNodeMap;
typedef std::pair<std::string, std::string> strPair;
typedef std::pair<ConfigNode*, ConfigNode*> nodePair;
typedef std::pair <std::multimap<ConfigNode*,ConfigNode*>::iterator, std::multimap<ConfigNode*,ConfigNode*>::iterator> itrPair;
 
struct ConfigNode
{
    ConfigNode* parent;
    ConfigNodeMap children;
    virtual ~ConfigNode(){};
};
 
struct ConfigNodeTag : ConfigNode
{
    std::string name;
    std::map<std::string, std::string> attribs;
};
struct  ConfigNodeValue : ConfigNode
{
    std::string value;
};
 
class ConfigNodeBase
{
    public:
        ConfigNodeBase();
        ~ConfigNodeBase();
        virtual bool load(const std::string& filename)=0;
    protected:
        ConfigNode* top;
};
#endif /*CONFIGBASE_H_*/

И два отнаследованных от него класса:
ConfigNodeJson

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef CONFIGNODEJSON_H
#define CONFIGNODEJSON_H
#include "jsoncpp/json/json.h"
#include "ConfigNodeBase.h"
 
class ConfigNodeJson : public ConfigNodeBase
{
    public:
        bool load(const std::string& filename);
    private:
        void    nextNode(const Json::Value &root, ConfigNode* parentNode);
};
 
#endif
ConfigNodeXml

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifndef CONFIGNODEXML_H
#define CONFIGNODEXML_H
#include <tinyxml.h>
#include "ConfigNodeBase.h"
 
class ConfigNodeXml : public ConfigNodeBase
{
    public: 
        bool load(const std::string& filename);
    private:
        void    nextNode(TiXmlElement *parentElem, ConfigNode *parentNode);
} ;
 
#endif
сама тестирующая программа:

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
//test.cpp
#include "ConfigNodeXml.h"
#include "ConfigNodeJson.h"
#include <gtest/gtest.h>
 
using namespace std;
 
ConfigNodeJson configJson;
ConfigNodeXml   configXml;
 
class ConfigNodeTest : public ::testing::Test {
    protected:
    virtual void SetUp()
    {}
    
    virtual void TearDown()
    {}
};
 
TEST(ConfigNodeTest, DefaultConstructorTest)
{
    configJson.load("jsonExample.json");    
    configXml.load("example.xml");
}
мейкфайл для сборки(да, корявый, я знаю):

CLIBS = -ljsoncpp -ltinyxml -lgtest -lgtest_main -lpthread
CFLAGS = -std=c++11 -g

all: test


test: test.o ConfigNodeJson.o ConfigNodeXml.o
g++ $(CFLAGS) test.o -o Test $(CLIBS)

main.o: main.cpp ConfigNodeJson.h ConfigNodeJson.cpp
g++ $(CFLAGS) -c main.cpp

test.o: test.cpp ConfigNodeJson.h ConfigNodeJson.cpp ConfigNodeXml.h ConfigNodeXml.cpp ConfigNodeBase.h ConfigNodeBase.cpp
g++ $(CFLAGS) -c test.cpp ConfigNodeBase.cpp

ConfigNodeJson.o: ConfigNodeJson.h ConfigNodeJson.cpp ConfigNodeBase.h ConfigNodeBase.cpp
g++ $(CFLAGS) -c ConfigNodeJson.cpp ConfigNodeBase.cpp

ConfigNodeXml.o: ConfigNodeXml.h ConfigNodeXml.cpp ConfigNodeBase.h ConfigNodeBase.cpp
g++ $(CFLAGS) -c ConfigNodeXml.cpp ConfigNodeBase.cpp


clean:
rm -rf *.o Test

и собственно сам набор ошибок

make test (в каталоге: /home/whatareyoulookingfor/workspace/ConfigNodeBase)
g++ -std=c++11 -g -c test.cpp ConfigNodeBase.cpp
g++ -std=c++11 -g -c ConfigNodeJson.cpp ConfigNodeBase.cpp
g++ -std=c++11 -g test.o -o Test -ljsoncpp -ltinyxml -lgtest -lgtest_main -lpthread
test.o: In function `ConfigNodeTest_DefaultConstructorTest_T est::TestBody()':
/home/anton/workspace/ConfigNodeJson/test.cpp:30: undefined reference to `ConfigNodeJson::load(std::string const&)'
/home/anton/workspace/ConfigNodeJson/test.cpp:31: undefined reference to `ConfigNodeXml::load(std::string const&)'
test.o: In function `ConfigNodeJson::ConfigNodeJson()':
/home/anton/workspace/ConfigNodeJson/ConfigNodeJson.h:8: undefined reference to `ConfigNodeBase::ConfigNodeBase()'
/home/anton/workspace/ConfigNodeJson/ConfigNodeJson.h:8: undefined reference to `vtable for ConfigNodeJson'
test.o: In function `ConfigNodeXml::ConfigNodeXml()':
/home/anton/workspace/ConfigNodeJson/ConfigNodeXml.h:7: undefined reference to `ConfigNodeBase::ConfigNodeBase()'
/home/anton/workspace/ConfigNodeJson/ConfigNodeXml.h:7: undefined reference to `vtable for ConfigNodeXml'
test.o: In function `ConfigNodeJson::~ConfigNodeJson()':
/home/anton/workspace/ConfigNodeJson/ConfigNodeJson.h:8: undefined reference to `vtable for ConfigNodeJson'
/home/anton/workspace/ConfigNodeJson/ConfigNodeJson.h:8: undefined reference to `ConfigNodeBase::~ConfigNodeBase()'
test.o: In function `ConfigNodeXml::~ConfigNodeXml()':
/home/anton/workspace/ConfigNodeJson/ConfigNodeXml.h:7: undefined reference to `vtable for ConfigNodeXml'
/home/anton/workspace/ConfigNodeJson/ConfigNodeXml.h:7: undefined reference to `ConfigNodeBase::~ConfigNodeBase()'
collect2: error: ld returned 1 exit status
Сборка завершилась с ошибкой.
make: *** [test] Ошибка 1
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.10.2015, 23:26
Ответы с готовыми решениями:

Undefined reference при линковке
Здравствуйте, делал реализацию очереди на плюсах. Создал отдельный хедер и исходник для очереди. Пытался через make собрать, но на линковке...

Ошибка undefined reference to `assert_param при линковке
У меня не получается скомпилировать проект в консоли. Ошибка та, которая хорошо гуглится, которую много осбуждали, но эти обсуждения ничем...

При линковке: Undefined reference to std::count
Написал простейшую программу на c++: #include &lt;iostream&gt; void _start(){ std::cout &lt;&lt; &quot;trol&quot;; } Скомпилировал в...

3
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
21.10.2015, 23:59
вам же на чистом английском написали:
нет туловищ конструкторов/диструкторов,
и некоторых функций-членов

например:

C++
1
2
3
4
5
6
7
8
9
class ConfigNodeBase
{
    public:
        ConfigNodeBase();
        ~ConfigNodeBase();
        virtual bool load(const std::string& filename)=0;
    protected:
        ConfigNode* top;
};
где реализации конструктора и диструктора?

или:

C++
1
2
3
4
5
6
7
class ConfigNodeXml : public ConfigNodeBase
{
    public: 
        bool load(const std::string& filename);
    private:
        void    nextNode(TiXmlElement *parentElem, ConfigNode *parentNode);
} ;
где реализация метода load ?
0
0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 16
22.10.2015, 00:54  [ТС]
Реализация методов в отдельных cpp файлах: ConfigNodeBase.cpp, ConfigNodeJson.cpp и ConfigNodeXml.cpp.
такого вида:
C++
1
2
3
#include "ConfigNodeXml.h"
 
bool ConfigNodeXml::load(const std::string &filename) {return true;}
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
22.10.2015, 09:11
Лучший ответ Сообщение было отмечено Aratori как решение

Решение

Цитата Сообщение от Aratori Посмотреть сообщение
g++ $(CFLAGS) test.o -o Test $(CLIBS)
А чего линкуется-то только один объектник, когда их у тебя несколько?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2015, 09:11
Помогаю со студенческими работами здесь

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

Undefined reference to 'vtable for Touch'
Я не понимаю, что я неправильно делаю Input/InputDevice.hpp #ifndef INPUTDEVICE_HPP #define INPUTDEVICE_HPP class...

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

Undefined reference to `vtable for Vim'
Привет всем! пользуесь линуксом...установил qt creator 2.7.2 qt 5.1.0 ... написал самый простой слот и он почему то не работает ... ...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru