0 / 0 / 0
Регистрация: 10.06.2013
Сообщений: 16
1

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

21.10.2015, 23:26. Показов 1511. Ответов 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_Test::TestB ody()':
/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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2015, 23:26
Ответы с готовыми решениями:

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

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

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

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

3
Эксперт С++
8719 / 4262 / 950
Регистрация: 15.11.2014
Сообщений: 9,669
21.10.2015, 23:59 2
вам же на чистом английском написали:
нет туловищ конструкторов/диструкторов,
и некоторых функций-членов

например:

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  [ТС] 3
Реализация методов в отдельных cpp файлах: ConfigNodeBase.cpp, ConfigNodeJson.cpp и ConfigNodeXml.cpp.
такого вида:
C++
1
2
3
#include "ConfigNodeXml.h"
 
bool ConfigNodeXml::load(const std::string &filename) {return true;}
0
16085 / 8686 / 2121
Регистрация: 30.01.2014
Сообщений: 14,972
22.10.2015, 09:11 4
Лучший ответ Сообщение было отмечено Aratori как решение

Решение

Цитата Сообщение от Aratori Посмотреть сообщение
g++ $(CFLAGS) test.o -o Test $(CLIBS)
А чего линкуется-то только один объектник, когда их у тебя несколько?
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2015, 09:11
Помогаю со студенческими работами здесь

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

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
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru