gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:54:14 24 4
gpt4 key购买 nike

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

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

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

具体来说,一个链接器错误表明我的测试项目无法链接公共(public)构造函数访问的私有(private)静态方法。

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

我在这里有一个所有这些的 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但这只是建议我设置第三个项目来构建为一个库,然后链接那个静态库。这是唯一的方法吗?

最佳答案

此问题的一个可能解决方案是不从 EffCPP 项目创建可执行文件,而是创建一个静态库。然后可以轻松地将此静态库提供给测试项目,然后测试项目可以链接它并将其自身作为 exe 运行。

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

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

关于c++ - 测试项目在访问私有(private)静态方法时出现问题,即使我从未直接调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47387239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com