gpt4 book ai didi

c++ - Google 使用 SetUpTestCase 静态变量测试 undefined reference

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:35 26 4
gpt4 key购买 nike

我正在编写一个测试用例,它将有一个 SetUpTestCase() 方法,尽管我收到 undefined reference 链接器错误,但该方法将分配一个共享资源。

class ParsingEventsTest: public ::testing::Test {
protected:

static xml eventXml;

static void SetUpTestCase() {
ManagedObjectManagerSingleton::GET_SINGLETON().initializeTestEnvironment(PATH_TO_FILE);
eventXml= *ManagerSingleton::GET_SINGLETON().parse(PATH_TO_INPUT_FILES);
}

virtual void SetUp() {}
virtual void TearDown() {}
};

这会导致:

../test/ParsingEventsTest.o: In function `ParsingEventsTest::SetUpTestCase()':
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xa1): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xb0): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xbd): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xc2): undefined reference to `ParsingEventsTest::eventXml'
ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xce): undefined reference to `ParsingEventsTest::eventXml'
../test/ParsingEventsTest.o:ParsingEventsTest.cpp:(.text._ZN17ParsingEventsTest13SetUpTestCaseEv[ParsingEventsTest::SetUpTestCase()]+0xdd): more undefined references to `ParsingEventsTest::eventXml' follow
collect2: ld returned 1 exit status

编辑:

这也适用于非常简单的情况,例如内部分配

class ParsingEventsTest: public ::testing::Test {
protected:

static int *x;

static void SetUpTestCase() {
x = new int [30];
}

static void TearDownTestCase() {
delete [] x;
}

virtual void SetUp() {}
virtual void TearDown() {}
};

最佳答案

您只声明了字段 eventXml。你需要在某处定义它。在一些 .cpp 文件中,你必须像

xml ParsingEventsTest::eventXml;

编辑
至于为什么需要它:静态成员在类中的声明不能定义它。如果是这样,每个包含类定义的翻译单元都会定义它。但是每个程序只需要一个定义,所以你必须选择在类定义之外定义成员的地方(通常在一些.cpp文件中。最好是有成员函数定义的那个)。语法如上所示。

关于c++ - Google 使用 SetUpTestCase 静态变量测试 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17359998/

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