init_unit_test_suite重新定义错误
问题描述:
我试图编译自boost ::测试教程的例子:init_unit_test_suite重新定义错误
#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: In function 'boost::unit_test::test_suite* init_unit_test_suite(int, char**)': ..\src\test.cpp:23:1: error: redefinition of 'boost::unit_test::test_suite*
init_unit_test_suite(int, char**)' C:\Boost/boost/test/unit_test_suite.hpp:223:1: error: 'boost::unit_test::test_suite* init_unit_test_suite(int, char**)' previously defined here
如何解决这一问题?
答
您必须在编译器的命令行上定义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
有趣的是,我刚刚编译了例如用gcc 4.6.2,它给了没有错误可言。 我记得虽然有类似的错误消息。那一次我使用#define BOOST_TEST_MAIN宏并且摆脱它足以让它工作,但它似乎不是你的情况。 – dianull 2012-03-21 13:50:28