我正在测试一个库并得到错误未解决的外部。我对两个类进行了 A/B 测试TestBufferPrint
,TestMathLib
它们都有一个简单的静态函数。我在另一个项目中从 Main.cpp 调用它们,但只有一个有效,另一个是未解决的外部错误:
*error LNK2019: unresolved external symbol "public: static void __cdecl pClickDLL::TestBufferPrint::Print(int)" (?Print@TestBufferPrint@pClickDLL@@SAXH@Z) referenced in function "public: static void __cdecl UnitTests::FeatureDerivationTests::Test(void)" (?Test@FeatureDerivationTests@UnitTests@@SAXXZ) PClickDll\UnitTests\UnitTests.obj*
我怀疑它是由头文件包含引起的: CommonLibrary.h 包含在许多其他文件中,但 TestMathLib.h 仅包含在 Main.cpp 和 TestMathLib.cpp中。但我不确定也不明白为什么包含头文件会出错。
主文件
pClickDLL::TestMathLib::Print(123); // works fine
pClickDLL::TestBufferPrint::Print(123); // unresolved externals
TestBufferPrint 和 TestMathLib 类:
公共图书馆.h:
#pragma once
#include <vector>
namespace pClickDLL
{
class TestBufferPrint
{
public:
static void Print(int a);
};
}
CommonLibrary.cpp:
#include "../inc/CommonLibrary.h"
namespace pClickDLL
{
void TestBufferPrint::Print(int a)
{
return;
}
}
TestMathLib.cpp
#include "TestMathLib.h"
#include <iostream>
namespace pClickDLL
{
void TestMathLib::Print(int x)
{
std::cout << x;
}
}
TestMathLib.h:
#pragma once
namespace pClickDLL
{
class TestMathLib
{
public:
static void Print(int x);
};
}
更新:
此问题已解决,请查看下面的讨论。问题是Visual Studio 不会编译项目文件夹下的每个文件。您要检查输出日志以确保每个文件都已编译。