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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
DarkKelt
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 7
#1

Ошибка LNK2019 - C++

17.07.2013, 18:22. Просмотров 1379. Ответов 25
Метки нет (Все метки)

Создается библиотека D:\EWIL\EWIL(Old)\EWIL\scr\map editor\Debug\Map Editor.lib и объект D:\EWIL\EWIL(Old)\EWIL\scr\map editor\Debug\Map Editor.exp
4>EditorApp.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: virtual __thiscall TSkyBox::~TSkyBox(void)" (??1TSkyBox@@UAE@XZ) в функции __unwindfunclet$??0EditorApp@@QAE@XZ$0
4>EditorApp.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall TSkyBox::TSkyBox(void)" (??0TSkyBox@@QAE@XZ) в функции "public: __thiscall EditorApp::EditorApp(void)" (??0EditorApp@@QAE@XZ)
4>EditorApp.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall TSkyBox:rawTheSkybox(void)" (?DrawTheSkybox@TSkyBox@@QAEXXZ) в функции "public: virtual void __stdcall EditorApp::CreateSky(void)" (?CreateSky@EditorApp@@UAGXXZ)
4>EditorApp.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: long __thiscall TSkyBox::CreateSkyBox(void)" (?CreateSkyBox@TSkyBox@@QAEJXZ) в функции "public: virtual void __stdcall EditorApp::CreateSky(void)" (?CreateSky@EditorApp@@UAGXXZ)
4>D:\EWIL\EWIL(Old)\EWIL\scr\map editor\Debug\Map Editor.exe : fatal error LNK1120: 4 неразрешенных внешних элементов


как я понял он не видит методы описанные в ewil_skybox.cpp они засовываются в ewild.lib, подключение есть в проекте, вопрос: Почему он не видит методы если они описаны в cpp и если они объявленны как пустые () в классе, грубо говоря определение внутри класса нужно, но это извращением мне кажется. Связь между проектами идёт так EWIL ->Map Editor, нет ли ещё проблемы в том, что функции EWIL выгружаются в dll и в lib одновременно?
з.ы. MVS 2010 Professional

Добавлено через 11 часов 38 минут
Дополню что до включения обращений к методам описанным в файле TSkyBox.cpp и объявления связи с классом TSkyBox всё проходит нормально.

Добавлено через 2 минуты
Как понимаю помочь никто не может?!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2013, 18:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка LNK2019 (C++):

Ошибка 2 error LNK2019, не пойму в чем ошибка - C++
Выдает такую ошибку: Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ "int __cdecl game(void)" (?game@@YAHXZ) в функции....

LNK2019 ошибка - C++
Здравствуйте! Есть такая проблема, и уже долго не могу понять, в чём тут дело... При компиляции возникают ошибки в функция процессора,...

ошибка LNK2019 - C++
доброго времени суток, у меня возникает какая-то непонятная ошибка в следующем коде: #include <string> #include <list> class...

Ошибка LNK2019 - C++
Здравствуйте, уважаемые программисты! Обращаюсь к Вам потому, что в моей первой программе с классами вылетает ошибка линковки, а что с...

Ошибка LNK2019 - C++
Дописала код программы. Из ошибок выдает только вот ЭТО вот: "Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public:...

Ошибка LNK2019 - C++
Здравствуйте! Скачал игру WarZ точнее исходники, и HackShield(Защита от читеров). Пытаюсь защиту встроить в игру, но потом у меня начали...

25
Kastaneda
Jesus loves me
Эксперт С++
4697 / 2901 / 238
Регистрация: 12.12.2009
Сообщений: 7,385
Записей в блоге: 2
Завершенные тесты: 1
17.07.2013, 18:32 #2
Цитата Сообщение от DarkKelt Посмотреть сообщение
Почему он не видит методы если они описаны в cpp и если они объявленны как пустые () в классе
Всмысле они нигде не определяются? Пустой метод должен выглядеть так
C++
1
void method(){}
Если фигурных скобок нет, то конечно линкер не находит реализацию, поэтому и ругается.
0
DarkKelt
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 7
17.07.2013, 19:12  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
class TSkyBox:public EWIL_Direct3D9
{
public:
   /*Public Directives*/
    TSkyBox(void);
    virtual ~TSkyBox(void);
 
   HRESULT Initialize(float fSize);
   HRESULT CreateSkyBox();
   void DrawTheSkybox();
}
часть из файла в TSkyBox.cpp
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
HRESULT TSkyBox::CreateSkyBox(void)
{
  //Initialize Environment
  float _Radius = 1000.0f;
  if(FAILED(SkyBox.Initialize(_Radius))) return E_FAIL;
  
  /*//Misc Stuff
  D3DXMATRIXA16 m_matPosition;
  D3DXMatrixRotationX(&m_matPosition,D3DX_PI*-0.3f);
  m_matPosition._42 = 15.0f;
  m_matPosition._43 = 15.0f;  
  D3DXMatrixInverse(&m_matView,NULL,&m_matPosition);*/
  
  //Setup Render States
  //gr_Direct3DDevice->SetFVF(D3DFVF_XYZ);
 
  m_bDrawSkyBox = TRUE;
 
  for (UINT I = 0; I<6; I++)
  {
      D3DXCreateTextureFromFileEx(m_pD3DDevice_D9,szSkyTex[I],D3DX_DEFAULT,D3DX_DEFAULT,
    1,0,D3DFMT_UNKNOWN,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,0,NULL,NULL,&m_pSkyTex[I]);
  }
  
  //Set Cull Mode
  m_pD3DDevice_D9->SetRenderState(D3DRS_CULLMODE,D3DCULL_CW);
  
  //Set Skybox Surfaces
  if (FAILED(SkyBox.SetSurfaces(
  m_pSkyTex[D3DCUBEMAP_FACE_NEGATIVE_X],m_pSkyTex[D3DCUBEMAP_FACE_POSITIVE_X],
  m_pSkyTex[D3DCUBEMAP_FACE_NEGATIVE_Y],m_pSkyTex[D3DCUBEMAP_FACE_POSITIVE_Y],
  m_pSkyTex[D3DCUBEMAP_FACE_POSITIVE_Z],m_pSkyTex[D3DCUBEMAP_FACE_NEGATIVE_Z]))) return E_FAIL;
    
  return S_OK;
} //EndCreateSkyBoxFunction
извиняюсь, наверное не точно выразился, просто в классе объявленно как пустое, но описывается в cpp пример как в исходнике привёл.

Добавлено через 7 минут
дополню что связь вызовов идёт из разных проектов, между собой подключены все lib, то есть проблемы упирается в реализацию методов, они у меня описываются в TSkyBox.cpp проект EWIL, а я пытаюсь вызвать эти методы, в AppEditor.cpp он находится в проекте Map Editor, если переношу реализацию конструктора в сам класс, то проблема с первыми двумя ошибками его вызова TSkyBox уходит, но остаются ещё две ошибки, вот и хочу понять почему такое поведение

Добавлено через 19 минут
прочитай пост выше

Добавлено через 2 минуты
решил как ты сказал попробовать выдал ошибку, что метод уже определён, попробовал виртуальной сделать та же хрень
0
DarkKelt
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 7
03.08.2013, 05:57  [ТС] #4
тема закрыта, нашёл в чём проблема уже давно
0
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
03.08.2013, 22:03 #5
и в чем жэ решэние? У меня похожая проблема была и до сих пор не могу понять в чем прикол. Пути к хидерам прописал в свойствах, и ничего не помогло. Ти как решылсвою проблему?
0
DarkKelt
0 / 0 / 0
Регистрация: 17.07.2013
Сообщений: 7
04.08.2013, 04:03  [ТС] #6
Суть проблемы заключается в том, что если ты выгружаешь операторы в Dll то нужно объявление __dclcpec вроде, если ты пытаешь обратиться к классу с расширением типа extern MyClass TClass находящийся в заголовочнике, то он не увидит в cpp. Решается всё через подключения lib. Свойства->Сборщик->Ввод->Дополнительные файлы и каталоги. если проблема с переменной что описал выше с классами, то надо пихать либо в глобальную область либо в пространство имён своё описывать, решение с выгрузкой в dll я сказал. Иногда можно также использовать __stdcall для вынужденного вызова.
0
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
04.08.2013, 10:08 #7
Цитата Сообщение от DarkKelt Посмотреть сообщение
Суть проблемы заключается в том, что если ты выгружаешь операторы в Dll то нужно объявление __dclcpec вроде, если ты пытаешь обратиться к классу с расширением типа extern MyClass TClass находящийся в заголовочнике, то он не увидит в cpp. Решается всё через подключения lib. Свойства->Сборщик->Ввод->Дополнительные файлы и каталоги. если проблема с переменной что описал выше с классами, то надо пихать либо в глобальную область либо в пространство имён своё описывать, решение с выгрузкой в dll я сказал. Иногда можно также использовать __stdcall для вынужденного вызова.
А если там нет длл а просто проект с функцыями, и при попытке вызвать их в другом проекте кидает такую ошыбку? Тожэ в настройках линковку указать путь к папке проекта?
0
Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 84
04.08.2013, 11:39 #8
Цитата Сообщение от marni Посмотреть сообщение
А если там нет длл а просто проект с функцыями, и при попытке вызвать их в другом проекте кидает такую ошыбку?
Тебе нужно добавить файлы к проекту в самой студии, иначе линковщик будет их считать левой фигней.
0
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
04.08.2013, 11:59 #9
Цитата Сообщение от Misterkat Посмотреть сообщение
Тебе нужно добавить файлы к проекту в самой студии, иначе линковщик будет их считать левой фигней.
Ээээммммм. Вобшем такое дело: есть солюшын с 12 студии, в нем 2 проекти, один главный т.е тот где есть мэйн и второй(в нем только функцыи в стат.либ) при построении кидает такую ошыбку + лнк1120. Хотя все директории прописаны. В чем можэт быть дело?4 день мотаюсь и ничего, форуму все облазил, здесь тож писал....
0
Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 84
04.08.2013, 12:15 #10
Цитата Сообщение от marni Посмотреть сообщение
Ээээммммм. Вобшем такое дело: есть солюшын с 12 студии, в нем 2 проекти, один главный т.е тот где есть мэйн и второй(в нем только функцыи в стат.либ) при построении кидает такую ошыбку + лнк1120. Хотя все директории прописаны. В чем можэт быть дело?4 день мотаюсь и ничего, форуму все облазил, здесь тож писал....
Вкладывал через настройки проекта или через #pragma?
ЗЫ:Попробуй писать абсолютный путь.

Добавлено через 8 минут
Да, кстате забыл сказать, ьыла у меня тоже проблема с неразрешенными внешними символами, там получилось так, что было две функции в разных классах, но назывались одинаково, в конце концов оказалось, что при очерездом вызове функции забыл впилить указатель на класс, проверь, может и у тебя такая же ошибка.
0
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
04.08.2013, 12:28 #11
Цитата Сообщение от Misterkat Посмотреть сообщение
Вкладывал через настройки проекта или через #pragma?
ЗЫ:Попробуй писать абсолютный путь.
Через настройки проекта. Абсолютний путь - тоесть писать #инклуд с:/блабла бла?

Добавлено через 12 минут
Цитата Сообщение от Misterkat Посмотреть сообщение
Вкладывал через настройки проекта или через #pragma?
ЗЫ:Попробуй писать абсолютный путь.

Добавлено через 8 минут
Да, кстате забыл сказать, ьыла у меня тоже проблема с неразрешенными внешними символами, там получилось так, что было две функции в разных классах, но назывались одинаково, в конце концов оказалось, что при очерездом вызове функции забыл впилить указатель на класс, проверь, может и у тебя такая же ошибка.
Там только одна функцыя без классов
0
Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 84
04.08.2013, 12:33 #12
ты писал:
Цитата Сообщение от marni Посмотреть сообщение
в нем только функцыи в стат.либ
под названием статическая библиотека подразумевается расширение *.lib, или я что-то не понимаю?
далее ты писал:
Цитата Сообщение от marni Посмотреть сообщение
Абсолютний путь - тоесть писать #инклуд с:/блабла бла?
Но ведь статические библиотеки вкладываются через:
C++
1
#pragma comment(lib, "название.lib")
Или я опять чего-то не понимаю?
0
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
04.08.2013, 12:47 #13
Цитата Сообщение от Misterkat Посмотреть сообщение
ведь статические библиотеки вкладываются через:
C++
1
#pragma comment(lib, "название.lib")
Или я опять чего-то не понимаю?
Я не такой профи. .lib должна появитса со второго проекта, и быть использована в первом. И в настройках проекта можна выбрать директории с которых они будут подключатса.... Если есть 12 студия могу кинуть проект, так проще будет.
0
Misterkat
7 / 7 / 0
Регистрация: 16.11.2012
Сообщений: 84
04.08.2013, 12:49 #14
Цитата Сообщение от marni Посмотреть сообщение
Если есть 12 студия могу кинуть проект, так проще будет.
Пожалуй да...
0
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
04.08.2013, 13:03 #15
Цитата Сообщение от Misterkat Посмотреть сообщение
Пожалуй да...
Вот он
0
Вложения
Тип файла: rar sln.rar (224.3 Кб, 2 просмотров)
04.08.2013, 13:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2013, 13:03
Привет! Вот еще темы с ответами:

Ошибка LNK2019 - C++
Пишу небольшую базу данных (в учебных целях поэтому нигде не сохраняю) и при добавлении всех функций и структур в библиотеку, при их...

Ошибка LNK2019 - C++
Добрый день. Недавно начала изучать С++ (необходимо для научной деятельности). Программирую я в Visual Studio 2010 Express Напечатал я...

Ошибка LNK2019 - C++
Я только знакомлюсь с c++. Помогите пожалуйста разобраться. Есть такой класс: #pragma once template &lt;class Type&gt; class CMyArray...

Ошибка LNK2019 - C++
#include &lt;string&gt; using namespace std; class Language { public: Language() {}; void Log(string t) {}; };


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

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

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