gpt4 book ai didi

c++ - 来自 gmock 的 DefaultValue 的范围问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:34 25 4
gpt4 key购买 nike

如果我把 DefaultValue<int>::Set(10)在测试中,一切正常,但是,如果我把它放在外面,它会报错。怎么了?根本原因?

using ::testing::DefaultValue;
struct Foo {
MOCK_METHOD0(doWork, int());
};

DefaultValue<int>::Set(10); // error: specializing member 'testing::DefaultValue<int>::Set' requires 'template<>' syntax;

TEST(BarTest, DoesThis) {
Foo foo;
DefaultValue<int>::Set(10); // everything works fine.
EXPECT_CALL(foo, doWork());
foo.doWork();
}

最佳答案

DefaultValue<int>::Set(10)是一个函数调用。它是一个语句,一般来说,语句不能在命名空间范围内单独出现。

将它放在函数的范围内是可以的,这就是它起作用的原因。尽管您可能想要重构它,使其在您测试套件之前只运行一次(毕竟,这就是拥有全局默认值的意义所在)。

将它放在任何函数之外时出现的错误只是由于编译器的混淆。因为它看起来就像您正在尝试专门化 DefaultValue<int> 的成员函数一样,编译器不知道你的意图是做一些不能做的事情。因此,如果您在特化过程中犯了一个诚实的错误,那么诊断的措辞旨在帮助您做正确的事情。

关于c++ - 来自 gmock 的 DefaultValue 的范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47246743/

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