如何在同一解决方案中声明一个对象并从另一个Project中定义的类调用其方法?

use*_*127 2 linker-errors unresolved-external visual-c++

我正在尝试使用Microsoft CppUnitTestFramework.我在一个解决方案中有两个独立的项目,一个是实际代码,另一个是单元测试代码.现在我想测试第一个项目中定义的"DijkstarImpl"类,并在项目Properties-> C++ - > General-> AdditionalInclude目录中添加了此类的路径.测试项目编译成功,但是当我运行测试时,我收到此错误:

错误2错误LNK2001:未解析的外部符号"public:static class DijkstarImpl*UnitTest_FasTrack :: UnitTest1 :: dijkstarImpl"(?dijkstarImpl @ UnitTest1 @ UnitTest_FasTrack @@ 2PAVDijkstarImpl @@ A)C:\ working\TestFastTrack\UnitTest_FasTrack\unittest1.obj

错误3错误LNK2001:未解析的外部符号"public:__thiscall DijkstarImpl :: DijkstarImpl(void)"(?? 0DijkstarImpl @@ QAE @ XZ)C:\ working\TestFastTrack\UnitTest_FasTrack\unittest1.obj

错误是链接器错误,但我不知道应该链接什么?它不是要包含在Properties-> Linker-> Input中的lib文件.以下代码段显示了单元测试代码.

#include "stdafx.h"
#include "CppUnitTest.h"
#include "DijkstarImpl.h"
#include "string.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest_FasTrack
{       
TEST_CLASS(UnitTest1)
{
    static DijkstarImpl*  dijkstarImpl;

public:
    TEST_CLASS_INITIALIZE(Initialize) 
    {           

        static DijkstarImpl*  UnitTest_FasTrack::UnitTest1::dijkstarImpl;
    }

    TEST_METHOD(TestMethod1)
    {



    }

};
}
Run Code Online (Sandbox Code Playgroud)

Jor*_*ean 6

您需要在类外部声明变量的实例,但是在同一名称空间中.

namespace UnitTest_FasTrack
{       
  TEST_CLASS(UnitTest1)
  {
    static DijkstarImpl* dijkstarImpl;

    public:
      TEST_CLASS_INITIALIZE(Initialize) 
      { 
      }

      TEST_METHOD(TestMethod1)
      {
      }
  };
  DijkstarImpl *UnitTest1::dijkstarImpl; //declared outside the scope of the class
}
Run Code Online (Sandbox Code Playgroud)