gpt4 book ai didi

c++ - 内联函数的gtest问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:57:16 26 4
gpt4 key购买 nike

你好,我有内联函数,当我尝试用谷歌测试测试这个类时,我有这样的错误:

 error LNK2019: unresolved external symbol "public: double __thiscall Math::returnPi(void)" (?returnPi@Math@@QAENXZ) referenced in function "private: virtual void __thiscall Speed_Math_Test::TestBody(void)" (?TestBody@Speed_Math_Test@@EAEXXZ)

例如我的类(头文件)

class Math
{
public:
Math(void);
inline double returnPi();
~Math(void);
};

我的类(class)(cpp文件)

Math::Math(void)
{}
Math::~Math(void)
{}
double Math::returnPi()
{ return 3.14;}

测试:

TEST(EQ, Math)
{
Math *m=new Math();
EXPECT_EQ(3.14,m->returnPi());
}

我需要做什么?我阅读了手册,但看不到如何解决此错误。

最佳答案

内联函数应该在您的头文件中,而不是在您的源文件中,这样它实际上可以被调用者内联(它们无权访问源文件)。

此外,如果您给出函数的定义,则无需在类声明中指定inline

所以你的标题应该变成:

class Math
{
public:
Math(void);
double returnPi() { return 3.14; } // no need to specify inline here
~Math(void);
};

并从源文件中删除 returnPi() 的定义。

请注意,您也可以这样做:

class Math
{
public:
Math(void);
double returnPi();
~Math(void);
};


inline double Math::returnPi() { return 3.14; } // inline is mandatory here to avoid respecting the "One Definition Rule"

如果您希望将类声明与函数定义分开,则第二种解决方案很好。

另请注意,inline 不保证实际的函数调用将被内联:它唯一强制执行的是您不必遵守“单一定义规则”:inline 函数必须在所有翻译单元中具有相同的定义。

关于c++ - 内联函数的gtest问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5833213/

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