Хорошо, поэтому я просмотрел ряд вопросов, заданных в отношении переполнения стека по этому вопросу, и не смог найти ничего, что вполне отвечает моей проблеме.Ускоренный тест нерегулируемый внешний со статической переменной
Это ошибка, которую я получаю при связывании проекта тестового тестирования с моим производственным кодом. Я использую МСВС-2013:
2 error LNK2001: unresolved external symbol "private: static class std::shared_ptr Debug::_Debug" ([email protected]@@[email protected]@@@[email protected]@A) C:\Code\Main.Testing\B.obj
3 error LNK1120: 1 unresolved externals C:\Code\Main.Testing\Debug\Main.Testing.exe
Вот код вызывает ошибку:
debug.h:
#pragma once
#include <string>
#include <memory>
class Debug
{
private:
static std::shared_ptr<Debug> _Debug;
public:
static std::shared_ptr<Debug> Instance()
{
if (!_Debug)
{
_Debug.reset(new Debug);
}
return _Debug;
}
Debug() {}
~Debug() {}
void Exit(std::string sMessage)
{
//Do stuff.
return;
}
};
Debug.cpp:
#include "Debug.h"
std::shared_ptr<Debug> Debug::_Debug;
Test файл B.cpp в отдельном тестовом проекте:
#pragma once
#define BOOST_TEST_DYN_LINK
#include <boost\test\unit_test.hpp>
#include "<path-to-folder>/Debug.h"
BOOST_AUTO_TEST_SUITE(B)
BOOST_AUTO_TEST_CASE(testCaseB)
{
Debug::Instance()->Exit("blah");
}
BOOST_AUTO_TEST_SUITE_END()
Код компилируется, и тесты выполняются нормально, когда я удаляю статическую переменную из вышеуказанного файла. Решение также компилирует, связывает и работает нормально, когда я исключаю тестовый проект, но включаю статическую переменную, поэтому я предполагаю, что это что-то с моей настройкой. Я некоторое время занимался этим, и я был в тупике от того, что это может быть. Мне что-то не хватает?
Единственная проблема, о которой я могу думать, заключается в том, что 'Debug.cpp' не соединяется вместе с этим« отдельным тестовым проектом », в котором находится B.cpp. (Я надеюсь, вы попытались избавиться от 'typedef std :: shared_ptr DebugPtr;' и заменить все ссылки на 'DebugPtr' на' std :: shared_ptr 'перед тем, как задать вопрос, верно?) –
@MikeNakis Да, это было одна из первых вещей, которые я пробовал, когда я сталкивался с этой ситуацией раньше. Однако это не изменило результат. Я возьму typedef в моем примере, чтобы избежать этой путаницы. –