init_unit_test_suite重新定义错误

时间:2012-03-07 15:34:54

标签: c++ boost-test

我正在尝试从boost :: test tutorial编译一个例子:

#include <boost/test/included/unit_test.hpp>
using namespace boost::unit_test;

void test_case1() { /* : */ }

test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
  test_suite* ts1 = BOOST_TEST_SUITE( "test_suite1" );
  ts1->add( BOOST_TEST_CASE( &test_case1 ) );
  framework::master_test_suite().add( ts1 );
  return 0;
}

但是我收到以下错误:

  

.. \ src \ test.cpp:在函数'boost :: unit_test :: test_suite *中   init_unit_test_suite(int,char **)':.. \ src \ test.cpp:23:1:错误:   重新定义'boost :: unit_test :: test_suite *
  init_unit_test_suite(int,char **)'   C:\ Boost / boost / test / unit_test_suite.hpp:223:1:错误:   'boost :: unit_test :: test_suite * init_unit_test_suite(int,char **)'   以前在此定义

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您必须在编译器的命令行上定义BOOST_TEST_MAIN(如果您使用的是VS,则在项目设置中)。

定义BOOST_TEST_MAIN会引入您稍后重新介绍的方法:

// ************************************************************************** //
// **************                BOOST_TEST_MAIN               ************** //
// ************************************************************************** //

#if defined(BOOST_TEST_MAIN)

#ifdef BOOST_TEST_ALTERNATIVE_INIT_API
bool init_unit_test()                   {
#else
::boost::unit_test::test_suite*
init_unit_test_suite( int, char* [] )   {
#endif

http://svn.boost.org/svn/boost/trunk/boost/test/unit_test_suite.hpp