ошибка LNK2019 неразрешенный внешний символ - проблема с библиотекой классов?

У меня есть одно решение с двумя проектами. (VS2013)

Один проект представляет собой проект Direct3D с XAML, а другой — библиотеку статических классов.

Я установил зависимости проекта.

введите здесь описание изображения

Мне интересно, могут ли неразрешенные внешние символы иметь какое-либо отношение к этому.

Вот ошибки, которые я получаю... и мне трудно понять их значение

Error   1   error LNK2019: unresolved external symbol "public: __thiscall Game::Model::Input::Keyboard::Keyboard(void)" (??0Keyboard@Input@Model@Game@@QAE@XZ) referenced in function "public: __cdecl Game::App::App(void)" (??0App@Game@@Q$AAA@XZ)    C:\Users\James\Documents\Visual Studio 2013\Projects\Games\Jimmy\Game\App.xaml.obj  Game
Error   2   error LNK2019: unresolved external symbol "public: __thiscall Game::Model::Entities::Player::Player(void)" (??0Player@Entities@Model@Game@@QAE@XZ) referenced in function "public: void __thiscall Game::PlayerRenderer::InstantiateDependantObjects(void)" (?InstantiateDependantObjects@PlayerRenderer@Game@@QAEXXZ)  C:\Users\James\Documents\Visual Studio 2013\Projects\Games\Jimmy\Game\PlayerRenderer.obj    Game
Error   3   error LNK1120: 2 unresolved externals   C:\Users\James\Documents\Visual Studio 2013\Projects\Games\Jimmy\Debug\Game\Game.exe    1   1   Game

Это одна часть кода, с которой он борется:

Модельный проект

Модель\Entities\Keyboard.h

#pragma once

namespace Game
{
    namespace Model
    {
        namespace Input
        {
            class Keyboard
            {
            public:
                Keyboard();

                bool Up;
                bool Down;
                bool Left;
                bool Right;
                bool Space;
                bool Escape;
            };
        }
    }
}

Модель\Entities\Keyboard.cpp

#include "pch.h"

#include "Entities\Keyboard.h"

using namespace Game::Model::Input;

Keyboard::Keyboard()
:   Up( FALSE ),
    Down( FALSE ),
    Left( FALSE ),
    Right( FALSE ),
    Space( FALSE ),
    Escape( FALSE )
{}

Игровой проект

Игра\App.xaml.h

#pragma once

...
#include "..\Model\Entities\Keyboard.h"    
...

using namespace Game::Model::Input;

namespace Game
{
    ref class App sealed
    {
    public:
        ...    
    private:
        ...         
            Keyboard* keyboard;    
            ...
    };
}

Игра\App.xaml.cpp

App::App()
{
    InitializeComponent();
    keyboard = new Keyboard();
    Suspending += ref new SuspendingEventHandler(this, &App::OnSuspending);
    Resuming += ref new EventHandler<Object^>( this, &App::OnResuming );
}

...

Любые идеи?


person Jimmyt1988    schedule 11.03.2014    source источник
comment
Вы уверены, что Keyboard.cpp скомпилирован?   -  person felknight    schedule 11.03.2014
comment
Любой способ убедиться? Я щелкнул правой кнопкой мыши проект модели и щелкнул только проект/сборка модели, я предполагаю, что он скомпилирован по этой причине, верно? без вопросов?   -  person Jimmyt1988    schedule 11.03.2014
comment
Попробуйте найти объектный файл в промежуточном каталоге, что-то вроде Keyboard.obj, если найдете, удалите его и скомпилируйте заново.   -  person felknight    schedule 11.03.2014


Ответы (1)


Этот диалог не делает того, на что вы надеетесь, вы на самом деле не связываете свой проект статической библиотеки. Раньше это было в старых версиях VS до VS2010, теперь он устанавливает только порядок сборки.

Вместо этого используйте Project + Properties, Common Properties, References. Нажмите кнопку «Добавить новую ссылку» и отметьте свой проект библиотеки.

person Hans Passant    schedule 11.03.2014
comment
Спасибо чувак! Это был билет... Вы джентльмены и ученый. - person Jimmyt1988; 11.03.2014