我收到这些错误消息



这是我的解决方案:



Engine.cpp

Main.cpp

SetupSDL.cpp



这是Engine.h的代码

#pragma once
#include "SetupSDL.h"

class CEngine
{
public:
    CEngine(void);
    ~CEngine(void);

    void SetWindowSize(int winW, int winH, const char* GameName, int windowMode);
    void Begin(void);

    int GetDisplayWidth(void);
    int GetDisplayHeight(void);
private:
    int deskW;
    int deskH;

    bool playing;
    CSetupSDL* sdl_setup;
};
Engine.cpp的代码
#include "Include/stdafx.h"
#include "Include/Engine.h"

CEngine::CEngine(void)
{
    playing = true;

    deskW = GetSystemMetrics(SM_CXSCREEN);
    deskH = GetSystemMetrics(SM_CYSCREEN);
}


CEngine::~CEngine(void)
{
}

void CEngine::SetWindowSize(int winW, int winH, const char* GameName, int windowMode)
{
    // set up SDL for use
    sdl_setup = new CSetupSDL(winW, winH, GameName, windowMode);
}

void CEngine::Begin(void)
{
    while (playing && sdl_setup->GetMainEvent()->type != SDL_QUIT)
    {
        sdl_setup->Begin();
        sdl_setup->End();
    }

    playing = false;
}

int CEngine::GetDisplayWidth(void){ return deskW; }
int CEngine::GetDisplayHeight(void){ return deskH; }

DelveEngine项目成功构建,而delveenginetest项目失败。

怎么了?我到处看都是有原因的,找不到适合我的一个。

最佳答案

尽管您没有提供正确诊断问题的所有足够信息,但我将尝试分享我可以想象的可能是链接器错误的原因:

  • 我想您提到的delveenginetest项目旨在为DelveEngine项目中的类设置单元测试。
  • 因为您的Main.cpp项目中有一个DelveEngine,所以我猜想它只是作为可执行文件构建(成功)。
  • 您的delveenginetest需要链接到DelveEngine项目提供的类,但这实际上是不可能的,因为.exe中的DelveEngine不能用于链接,因此需要一个库将其导入到另一个可执行文件(单元测​​试)框架)。

  • 我建议将您的类/源文件从DelveEngine项目中分离出来,以组成一个静态或共享库,这些库可以从一个VS解决方案中同时与应用程序和测试框架链接:
    Solution 'DelveEngine' (3 projects)
       DelveEngineLib (project [.lib/.dll])
          Include
             delve.h
             Engine.h
             SetupSDL.h
          Engine.cpp
          SetupSDL.cpp
       DelveEngine (project [.exe])
          Main.cpp
       delveenginetest (project [.exe])
          Main.cpp (TestFramework main definition)
    

    由于我不太熟悉它,因此我实际上并不知道,VS 2013是否支持设置使用虚拟资源的项目(请考虑实际构建环境中的源链接),但这可以作为一种替代方法来设置应用程序和单元测试,无需额外的库。

    10-08 14:48