0

我正在测试一个库并得到错误未解决的外部。我对两个类进行了 A/B 测试TestBufferPrintTestMathLib它们都有一个简单的静态函数。我在另一个项目中从 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 不会编译项目文件夹下的每个文件。您要检查输出日志以确保每个文件都已编译。

4

0 回答 0