Pat*_*ryk 4 c++ googletest undefined-reference testcase
我正在编写一个测试用例,它将有一个SetUpTestCase()分配共享资源的方法,尽管我收到的是未定义的引用链接器错误.
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() {}
};
Run Code Online (Sandbox Code Playgroud)
这会导致:
../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
Run Code Online (Sandbox Code Playgroud)
编辑:
这也适用于非常简单的例如int分配
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() {}
};
Run Code Online (Sandbox Code Playgroud)
你只声明了字段eventXml.你需要在某个地方定义它.在某些.cpp文件中,你必须放线
xml ParsingEventsTest::eventXml;
Run Code Online (Sandbox Code Playgroud)
编辑
至于需要它的原因:类中静态成员的声明无法定义它.如果是这样,那么包含类定义的每个翻译单元都会定义它.但是每个程序只需要一个定义,因此你必须选择在类定义之外定义成员的位置(通常在一些.cpp文件中.最好的是具有成员函数定义的那个).语法如上所示.
| 归档时间: |
|
| 查看次数: |
6587 次 |
| 最近记录: |