【问题标题】:Gtest: Expected Class-Name Before '{'Gtest:“{”之前的预期类名
【发布时间】:2016-03-11 03:21:21
【问题描述】:

我正在尝试将 Gtest 下的测试用例转换为使用测试夹具,以便在添加更多测试时进行通用设置。但是,这会导致错误:

test_integrate.cc:4:47: error: expected class-name before '{' token
  class IntegratorTest : public ::testing::test {

这个失败是我无法理解的,因为根据我的经验,它通常是由循环导入引起的,并且与工作代码相比,导入没有任何变化。完整代码如下:

#include "gtest/gtest.h"
#include "utils/integrate.hpp"

class IntegratorTest : public ::testing::test {
protected:
    Integrator integ;
    VectorXf v, xdot;
    float cur_time;

    virtual void SetUp() {
        integ = Integrator(1.0);
        v = VectorXf::Ones(10);
        xdot = VectorXf::Ones(10);
        cur_time = 0.0;
    }
};

TEST_F(IntegratorTest, Euler) {
    // Use e^t for a simple test algorithm
    for (short i = 1; i < 5; i++) {
        v = integ.Euler(v, xdot, cur_time);
        xdot *= 2.0;
        EXPECT_EQ(i, cur_time);
        EXPECT_EQ(xdot, v);
    }
}

如果我移除夹具并在测试用例中初始化设置,代码编译得很好。该工作代码如下。

#include "gtest/gtest.h"
#include "utils/integrate.hpp"

TEST(Integrate, Euler) {
    Integrator integ = Integrator(1.0);
    VectorXf v = VectorXf::Ones(10);
    VectorXf xdot = VectorXf::Ones(10);
    float cur_time = 0.0;

    // Use e^t for a simple test algorithm
    for (uint16_t i = 1; i < 5; i++) {
        v = integ.Euler(v, xdot, cur_time);
        xdot *= 2.0;
        EXPECT_EQ(i, cur_time);
        EXPECT_EQ(xdot, v);
    }
}

我似乎找不到任何解释我如何解决这个错误以便它允许我编译的东西。

为了以防万一,编译我正在运行通过 Homebrew 在最新的 El Capitan OS X 上安装的 GCC 5.3.0。

【问题讨论】:

    标签: c++ gcc compiler-errors googletest


    【解决方案1】:

    你要继承的类叫::testing::Test,而不是::testing::test

    【讨论】:

    • 哇。就我而言,完全是愚蠢的。甚至没有想到错误可能是这样的错字的结果。感谢您发现这一点。
    • IBM 为这个错字感到羞耻!见这里:ibm.com/developerworks/aix/library/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2015-01-19
    • 2017-02-19
    相关资源
    最近更新 更多