测试项目在访问私有静态方法时出现问题,即使我从未直接调用它

Test project has problems accessing a private static method, even though I never directly call it

我正在尝试为我的技能添加一些缺失的技能,其中之一是设置适当的并行测试项目。

我在一个项目 (EffCPP) 中有一个简单的设置来试验一些 C++ 概念,我正在尝试在另一个可以访问所有相关文件和的项目中设置一个 Google 测试项目(测试)测试它们。

不幸的是,在成功设置测试项目后,我开始在 Test 中从 EffCPP 项目构建数据时遇到问题。

具体来说,一个 linker 错误表明我的测试项目不能 link public 构造函数访问的私有静态方法。

我确信我在这里遗漏了一些关于编译过程的东西,但解决方案似乎并不明显,而且查询本身很难 google。

我有一个 github 存储库,所有这些都位于此处:https://github.com/Vidrohi/EffectiveCPP.git

有人建议我尝试为问题中的情况创建一个简单的示例。以下是我试图解释的内容:

///////////////////////// EffCPP ////////////////////////////////


/////////////////////////  ClassToBeTested.h ////////////////////////////////


class ClassToBeTested
{
private:
    unsigned int m_id;

    static unsigned int s_currentId;
    static unsigned int GetNextId();

public:

    ClassToBeTested():m_id(GetNextId())
    {}  
}

/////////////////////////  ClassToBeTested.cpp ////////////////////////////////

#include "ClassToBeTested.h"

unsigned int Performance::NonPOD::s_currentId = 0;

unsigned int Performance::NonPOD::GetNextId()
{
    return ++s_currentId;
}

///////////////////////// TestProject ////////////////////////////////

///////////////////////// Tests.cpp /////////////////////////

#include "gtest/gtest.h"
#include "../EffCPP/Chapter6/ClassToBeTested.h" // Just the path where that header is located really

std::string name("NAME");
TEST(name, name) {
    EXPECT_EQ(1, 1); // Just to make sure the test framework is running correctly

    ClassToBeTested cp;
}

编辑 2:有趣的是,我发现了另一个问题,它讨论了几乎相同的问题 link 但这只是建议我设置第三个项目作为库构建,然后 link 那个静态库。这是唯一的方法吗?

此问题的一个可能解决方案是不从 EffCPP 项目创建可执行文件,而是创建一个静态库。 这个静态库可以很容易地提供给测试项目,然后可以 link 它和 运行 本身作为一个 exe。

在此 question 中可以找到另一种可能的解决方案,但这需要创建第三个项目。

我仍在寻找一种能够只使用两个项目并将它们构建为 .exe 的方法