gpt4 book ai didi

c++ - gtest –– 使用 TEST_F 时 undefined symbol

转载 作者:行者123 更新时间:2023-11-28 01:46:24 28 4
gpt4 key购买 nike

我不确定我是否正确设置了我的 gtest 环境。当我用 EXPECT_EQ 东西做简单的 TEST 时,一切都很好。然而,当我尝试像 TEST_F 这样更奇特的东西时,链接器会提示。

源代码:

class MyTest : public testing::Test
{
protected:
static const int my_int = 42;
};

TEST_F(MyTest, test)
{
EXPECT_EQ(my_int, 42);
}

这给出了

Undefined symbols for architecture x86_64:
"MyTest::my_int", referenced from:
MyTest_test_Test::TestBody() in instruction_test.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [tests/tests/run_tests] Error 1
make[2]: *** [tests/tests/CMakeFiles/run_tests.dir/all] Error 2
make[1]: *** [tests/tests/CMakeFiles/run_tests.dir/rule] Error 2
make: *** [run_tests] Error 2

知道为什么会这样吗?

最佳答案

这不是来自 googletest 的问题,而是来自 C++ 的语义。

原因:我们只能在类上调用静态类成员,而不能在类的对象上调用。这是可能的,即使不存在实例。这就是为什么每个静态成员实例都必须初始化的原因,通常是在 cpp 文件中。

关于c++ - gtest –– 使用 TEST_F 时 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44877084/

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