使用Visual Studio 2008编译catch时出错

时间:2017-09-28 20:22:16

标签: c++ visual-studio-2008 catch-unit-test

更新:使用catch 1.9.7解决了这个问题。

我刚刚开始使用catch并且甚至无法获得一个简单的测试项目来编译。我正在使用Visual Studio 2008并拥有catch.hpp v1.10.0(单个文件版本)。

我在catch教程之后创建了一个简单的测试项目。 main.cpp是唯一的文件,代码包括:

#define CATCH_CONFIG_MAIN
#include "catch.hpp"

TEST_CASE("test case 1")
{
    REQUIRE(1==2);
}

编译时出现以下错误:

c:\utilities\catch\catchtest\catchtest\catch.hpp(1333) : warning C4181: qualifier applied to reference type; ignored
c:\utilities\catch\catchtest\catchtest\catch.hpp(1838) : see reference to class template instantiation 'Catch::Internal::Evaluator<T1,T2,Op>' being compiled
with
[
    T1=const int &,
    T2=const int &,
    Op=IsEqualTo
]
c:\utilities\catch\catchtest\catchtest\catch.hpp(1836) : while compiling class template member function 'void Catch::BinaryExpression<LhsT,Op,RhsT>::endExpression(void) const'
with
[
    LhsT=const int &,
    Op=IsEqualTo,
    RhsT=const int &
]
c:\utilities\catch\catchtest\catchtest\main.cpp(8) : see reference to class template instantiation 'Catch::BinaryExpression<LhsT,Op,RhsT>' being compiled
with
[
    LhsT=const int &,
    Op=IsEqualTo,
    RhsT=const int &
]
c:\utilities\catch\catchtest\catchtest\catch.hpp(1333) : error C2529: 'lhs' : reference to reference is illegal
c:\utilities\catch\catchtest\catchtest\catch.hpp(1333) : warning C4181: qualifier applied to reference type; ignored
c:\utilities\catch\catchtest\catchtest\catch.hpp(1333) : error C2529: 'rhs' : reference to reference is illegal
c:\utilities\catch\catchtest\catchtest\catch.hpp(1838) : error C2664: 'Catch::Internal::Evaluator<T1,T2,Op>::evaluate' : cannot convert parameter 1 from 'const int' to 'const int &(&)'
with
[
    T1=const int &,
    T2=const int &,
    Op=IsEqualTo
]
c:\utilities\catch\catchtest\catchtest\catch.hpp(1839) : error C2228: left of '.endExpression' must have class/struct/union

非常感谢任何帮助。我还没有能够在catch文档或在线上找到任何内容,我很想开始使用它。

2 个答案:

答案 0 :(得分:0)

最新的Catch大师是现代C ++编译器,Visual Studio 2008编译器现在已经很老了。您可以使用一些开关来降级某些功能:

https://github.com/philsquared/Catch/blob/master/docs/configuration.md

尝试使用#include'ing catch之前定义的'CATCH_CONFIG_NO_CPP11'。

答案 1 :(得分:0)

供将来参考:MSVC 9的支持被this commit打破并恢复b6e7c9bd7a160c07c5de894292022687895c17a3(在它上面完成),然后这个就足以解决问题了。