5

我在编写一些测试的 C++ 文件中收到此错误:

error: no member named 'Session' in namespace 'Catch'
        testResult = Catch::Session().run(test_argc, test_argv);
                     ~~~~~~~^

查看 catch.hpp 单个头文件,我注意到应该实现 Session() 成员函数的代码是灰色的,可能是因为我找不到某处的 #ifdef。

是否有任何宏可以设置为使用 Session 类?

捕获版本:1.5.3 和 1.5.6。

参考:https ://github.com/philsquared/Catch/blob/master/docs/own-main.md

4

2 回答 2

4

您正在尝试Catch::Session从未定义自己main要执行的文件中调用构造函数。根据关于定义自己的 main 的文档,应该只有一个实例Catch::Session

Catch::Session session; // There must be exactly once instance

很可能 Catch 正在阻止Catch::Session在无法在自main定义定义中使用它的翻译单元中构建(因为这是应该使用它的地方),以防止您在编译时犯下的错误。

于 2016-06-29T17:45:56.023 回答
1

参考https://github.com/catchorg/Catch2/blob/master/docs/own-main.md

您只能在定义 CATCH_CONFIG_RUNNER 的同一文件中提供 main。

#define CATCH_CONFIG_RUNNER
#include "catch.hpp"

int main( int argc, char* argv[] ) {
  // global setup...

  int result = Catch::Session().run( argc, argv );

  // global clean-up...

  return result;
}
于 2020-09-21T12:12:57.423 回答