首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GoogleTest 1.7.0 ` `enum类编译错误

GoogleTest 1.7.0 ` `enum类编译错误
EN

Stack Overflow用户
提问于 2015-03-28 19:17:00
回答 1查看 530关注 0票数 0

当我尝试从测试夹具引用enum class时,它无法使用错误的./gtest_mcp23s17.cpp:25:52: error: no type named 'HW_ADDR_6' in 'mcp23s17::HardwareAddress' TC_mcp23s17 _gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6); ~~~~~~~~~~~~~~~~~~~~~~~~~~~^进行编译。

但是,如果我将引用保留在测试本身(保留所有其他代码不受影响),它就会编译而不出错,并按照您的预期运行测试。这是GoogleTest中的一个bug,或者就测试而言,这个场景有什么不同?

Test (泛型)编译

代码语言:javascript
复制
TEST(Construction, WHENObjectIsConstructedTHENAddressParameterIsStored) {
    TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
    EXPECT_EQ(0x4C, gpio_x.getSpiBusAddress());
}

测试夹具:编译

代码语言:javascript
复制
TEST_F(SPITransfer, WHENPinModeHasNotBeenCalledTHENTheCallersChipSelectPinIsHigh) {
    TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
    EXPECT_EQ(HIGH, getPinLatchValue(SS));
}

测试夹具(在gpio_x类中声明了gpio_x)失败

代码语言:javascript
复制
class SPITransfer : public ::testing::Test {
  protected:
    TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
    ...
}
TEST_F(SPITransfer, WHENPinModeHasNotBeenCalledTHENTheCallersChipSelectPinIsHigh) {
    EXPECT_EQ(HIGH, getPinLatchValue(SS));
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-28 20:44:19

类成员只能用={}初始化,而不能用()初始化。所以这两种方法中的任何一种都应该有效:

代码语言:javascript
复制
TC_mcp23s17 gpio_x=mcp23s17::HardwareAddress::HW_ADDR_6;
TC_mcp23s17 gpio_x{mcp23s17::HardwareAddress::HW_ADDR_6};

这条非常无用的错误消息是因为编译器解释了使用()来表示函数声明,然后由于括号中的东西不是类型而感到困惑。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29321464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档