Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Regencul
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 16
#1

Неразрешенный внешний символ - C++

13.07.2015, 22:00. Просмотров 493. Ответов 8
Метки нет (Все метки)

Здравствуйте! Недавно скачала библиотеку DocxFactory и решила, собственно, использовать ее в одном из проектов. В общем, путь к либе прописала, добавила в проект два новых класса - WordProcessingCompiler и WordProcessingMerger, которые нужны для работы. Все, вроде бы, корректно. Но при компиляции возникает аж 50 ошибок вида:
"WordProcessingCompiler.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: virtual __thiscall DocxFactory::WordProcessingCompiler::~WordProcessingCompiler(void)" (??1WordProcessingCompiler@DocxFactory@@UAE@XZ) в функции "public: virtual void * __thiscall DocxFactory::WordProcessingCompiler::`scalar deleting destructor'(unsigned int)" (??_GWordProcessingCompiler@DocxFactory@@UAEPAXI@Z)"
И так для каждой функции двух добавленных классов.
Ошибка такая возникает, насколько мне известно, когда опишешь прототип функции, но не реализуешь ее. Но тут-то все реализовано, и в чем же дело, никак не могу понять.
К примеру, вот заголовочный файл WordProcessingCompiler:
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
#ifndef __DOCXFACTORY_WORD_PROCESSING_COMPILER_H__
#define __DOCXFACTORY_WORD_PROCESSING_COMPILER_H__
 
#include <string>
 
namespace DocxFactory
{
    using namespace std;
 
    class WordProcessingCompiler
    {
    public:
        static WordProcessingCompiler& getInstance();
        virtual ~WordProcessingCompiler();
 
        void compile(const string& p_srcFileName, const string& p_dstFileName );
 
        // os functions
        void setTempDir();
        void setTempDir( const string& p_dir );
 
        string getWorkDir() const;
        string getTempDir() const;
 
    protected:
 
    private:
        WordProcessingCompiler();
        WordProcessingCompiler( const WordProcessingCompiler& p_other );
        WordProcessingCompiler& operator = ( const WordProcessingCompiler& p_other );
 
    };
};
 
#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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stdafx.h"
#include "WordProcessingCompiler.h"
#include "dfwc.h"
#include <stdexcept>
 
using namespace DocxFactory;
using namespace std;
 
 
 
WordProcessingCompiler& WordProcessingCompiler::getInstance()
{
    static WordProcessingCompiler s_instance;
    return s_instance;
} // getInstance
 
WordProcessingCompiler::WordProcessingCompiler()
{
 
} // c'tor
 
 
void WordProcessingCompiler::compile( const string& p_srcFileName, const string& p_dstFileName )
{
    dfwc_compile( p_srcFileName.c_str(), p_dstFileName.c_str() );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // compile
 
 
 
// os functions
void WordProcessingCompiler::setTempDir()
{
    dfwc_setTempDir( "" );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // setTempDir()
 
void WordProcessingCompiler::setTempDir( const string& p_dir )
{
    dfwc_setTempDir( p_dir.c_str() );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // setTempDir
 
string WordProcessingCompiler::getWorkDir() const
{
    return dfwc_getWorkDir();
} // getWorkDir
 
string WordProcessingCompiler::getTempDir() const
{
    return dfwc_getTempDir();
} // getTempDir
А вот main:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include "WordProcessingCompiler.h"  
#include <exception>
#include <iostream>
#include <ctime>  
 
using namespace DocxFactory;
using namespace std;
 
int main() {
    try  {
        WordProcessingCompiler& l_compiler = WordProcessingCompiler::getInstance();
        time_t l_start = clock();
        l_compiler.compile("/opt/DocxFactory/exercises/templates/top_level_items.docx", "/opt/DocxFactory/exercises/templates/top_level_items.dfw");
        cout << "Completed (in " << (double)(clock() - l_start) / CLOCKS_PER_SEC << " seconds)." << endl;
    }
    catch (const exception& p_exception)  { cout << p_exception.what() << endl; }
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 22:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Неразрешенный внешний символ (C++):

Неразрешенный внешний символ - C++
Ошибка LNK1120 неразрешенных внешних элементов: 1 Ошибка LNK2019 ссылка на неразрешенный внешний символ &quot;void __cdecl print(struct...

Неразрешенный внешний символ - C++
Привет всем, помогите исправить ошибку: Ошибка 1 error LNK2001: неразрешенный внешний символ &quot;&quot;struct kadry * array&quot;...

Неразрешенный внешний символ - C++
Ребят помогите, пожалуйста, не могу понять в чем заключается ошибка. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; ...

Неразрешенный внешний символ - C++
Здравствуйте. Не понимаю почему возникает ошибка. Исходный код.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;class Token...

Неразрешенный внешний символ - C++
Подскажите, пожалуйста, что эта может быть за ошибка fatal error LNK1120: 1 неразрешенных внешних элементов и warning C4996: 'getch': The...

Неразрешенный внешний символ - C++
Кароч дело в том что вечно видает ошибку в MFC1&gt;Figure.obj : error LNK2019: ссылка на неразрешенный внешний символ &quot;public: __thiscall...

8
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
13.07.2015, 22:11 #2
Цитата Сообщение от Regencul Посмотреть сообщение
Но тут-то все реализовано
А деструктор где реализован?
0
Regencul
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 16
13.07.2015, 22:23  [ТС] #3
DrOffset, ох. Случайно скопировала не целиком код. Вот оригинал. И деструктор тут есть:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdafx.h"
#include "WordProcessingCompiler.h"
#include "dfwc.h"
#include <stdexcept>
 
using namespace DocxFactory;
using namespace std;
 
 
WordProcessingCompiler& WordProcessingCompiler::getInstance()
{
    static WordProcessingCompiler s_instance;
    return s_instance;
} // getInstance
 
WordProcessingCompiler::WordProcessingCompiler()
{
 
} // c'tor
 
WordProcessingCompiler::~WordProcessingCompiler()
{
 
} // d'tor
 
 
void WordProcessingCompiler::compile( const string& p_srcFileName, const string& p_dstFileName )
{
    dfwc_compile( p_srcFileName.c_str(), p_dstFileName.c_str() );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // compile
 
 
 
// os functions
void WordProcessingCompiler::setTempDir()
{
    dfwc_setTempDir( "" );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // setTempDir()
 
void WordProcessingCompiler::setTempDir( const string& p_dir )
{
    dfwc_setTempDir( p_dir.c_str() );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // setTempDir
 
string WordProcessingCompiler::getWorkDir() const
{
    return dfwc_getWorkDir();
} // getWorkDir
 
string WordProcessingCompiler::getTempDir() const
{
    return dfwc_getTempDir();
} // getTempDir
0
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
13.07.2015, 22:57 #4
Regencul, а файлы-то все компилируются (добавлены в проект, мейкфайл, конфигурацию сборки, etc... чем вы там пользуетесь)? Или только один main.cpp?
Это очень важно.

Добавлено через 16 минут
Увидел ошибку. Вот так в cpp делать нельзя.
C++
1
using namespace DocxFactory;
Этим мы не засунем все что ниже в DocxFactory. А наоборот, импортируем DocxFactory в глобальное пространство. Однако имена функций класса, все равно будут включать DocxFactory при манглировании.
Поэтому надо переписать файл так, чтобы определение совпадало с реализацией:
Кликните здесь для просмотра всего текста
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
46
47
48
49
50
51
52
53
54
55
56
57
58
namespace DocxFactory 
{
 
WordProcessingCompiler& WordProcessingCompiler::getInstance()
{
    static WordProcessingCompiler s_instance;
    return s_instance;
} // getInstance
 
WordProcessingCompiler::WordProcessingCompiler()
{
 
} // c'tor
 
WordProcessingCompiler::~WordProcessingCompiler()
{
 
} // d'tor
 
 
void WordProcessingCompiler::compile( const string& p_srcFileName, const string& p_dstFileName )
{
    dfwc_compile( p_srcFileName.c_str(), p_dstFileName.c_str() );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // compile
 
 
 
// os functions
void WordProcessingCompiler::setTempDir()
{
    dfwc_setTempDir( "" );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // setTempDir()
 
void WordProcessingCompiler::setTempDir( const string& p_dir )
{
    dfwc_setTempDir( p_dir.c_str() );
 
    if ( dfwc_getErrorFlag() )
        throw runtime_error( dfwc_getErrorWhat() );
} // setTempDir
 
string WordProcessingCompiler::getWorkDir() const
{
    return dfwc_getWorkDir();
} // getWorkDir
 
string WordProcessingCompiler::getTempDir() const
{
    return dfwc_getTempDir();
} // getTempDir
 
} // namespace DocxFactory
0
Regencul
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 16
13.07.2015, 23:48  [ТС] #5
DrOffset, ничего не дало такое исправление.
0
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
14.07.2015, 00:12 #6
Цитата Сообщение от Regencul Посмотреть сообщение
ничего не дало такое исправление.
Если ТС не будет помогать, то и не даст Мы ж не Нострадамусы. В любом случае, одним подозрением меньше.
Что можно еще показать? Как вообще проект собирается?
Может его прикрепить сюда в архиве? Это будет проще всего.
0
Regencul
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 16
14.07.2015, 00:21  [ТС] #7
DrOffset, вот архив.
0
Вложения
Тип файла: rar Doc.rar (3.82 Мб, 2 просмотров)
DrOffset
7315 / 4415 / 1000
Регистрация: 30.01.2014
Сообщений: 7,252
14.07.2015, 00:56 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Regencul, так. Первое - не вижу с списках зависимостей библиотеку DocxFactory.lib.
Linker->General->Additional Library Directories - здесь задаем путь к *.lib файлам библиотеки
Linker->Input->Additional Dependencies - здесь задаем имя lib файла.
По идее еще и include надо прописать (Compiler->General->Additional include directories), но в нашем случае они всунуты прямо в проект (это не очень хорошо, если на будущее говорить).
_____
Вот добавил. Проект перепаковал и залил вложением.
Кстати ошибка там теперь другая была (из-за отсутствия библиотеки). Та, которая была в шапке - исправилась моим предложением в посте 4.
Чтобы запустить получившийся файл, нужно, чтобы DocxFactory.dll рядом лежала.
1
Вложения
Тип файла: 7z Doc.7z (2.02 Мб, 4 просмотров)
Regencul
0 / 0 / 0
Регистрация: 23.04.2014
Сообщений: 16
14.07.2015, 01:01  [ТС] #9
DrOffset, огромное спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 01:01
Привет! Вот еще темы с ответами:

Неразрешенный внешний символ - C++
Здравствуйте!Возникла проблема с классами Вот вообщем мой класс : WorldEdit.cpp #include &quot;WorldEdit.h&quot; #include &quot;Mouse.h&quot; ...

неразрешенный внешний символ - C++
В общем, проблема: подключаю библиотеку tbb (параллельные вычисления) и при компиляции выдается ошибка: &quot; Ошибка 4 error LNK2001:...

Неразрешенный внешний символ - C++
#include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using...

Ссылка на неразрешенный внешний символ - C++
Строка 36 PathStripToRoot(szRoot); Вызывает ошибки: Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ...


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
14.07.2015, 01:01
Ответ Создать тему
Опции темы

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