5

我正在尝试在 QTCreator for Windows 中测试我已经完成的库(微积分)。

我已经创建了一个主文件,并在一个单独的文件中创建了一个用于测试的类。如果我编译http://www.boost.org/doc/libs/1_47_0/libs/test/doc/html/utf/user-guide/test-organization/manual-test-suite.html中的示例,它可以工作,因此在http://www.boost.org/doc/libs/1_47_0/libs/test/doc/html/utf/user-guide/test-organization/manual-nullary-test-case.html中找到的示例也有效。

但是当我尝试编译我的项目时,我有很多(超过 500 个)多个定义的错误。您可以在下面找到我的文件。如您所见,我还尝试对 boost 标头进行一些防护,但它不起作用。我究竟做错了什么?

主文件

#include "testcalculus.h"

#ifndef USE_BOOST_HEADERS
#define USE_BOOST_HEADERS
#include <boost/test/included/unit_test.hpp>
#include <boost/bind.hpp>
#endif

using namespace boost::unit_test;

test_suite*
init_unit_test_suite( int argc, char* argv[] )
{
    WRayTesting::TestCalculus xTestCalculus;

    test_suite* pxTestSuiteCalculus = BOOST_TEST_SUITE("Test Calculus");

    pxTestSuiteCalculus->add(BOOST_TEST_CASE( boost::bind(&WRayTesting::TestCalculus::testCartesianPoint2D, &xTestCalculus)));

    framework::master_test_suite().add(pxTestSuiteCalculus);

    return 0;
}

testcalculus.h

#ifndef TESTCALCULUS_H
#define TESTCALCULUS_H

#ifndef USE_BOOST_HEADERS
#define USE_BOOST_HEADERS
#include <boost/test/included/unit_test.hpp>
#include <boost/bind.hpp>
#endif

#include "cartesianpoint2d.h"
#include "cartesianvector2d.h"

namespace WRayTesting
{

/** Class for testing the Calculus project */
class TestCalculus
{
public:

    //! Constructor
    TestCalculus();

    //! Testing class point
    void testCartesianPoint2D();

private:

};

} // namespace WRayTesting

#endif // TESTCALCULUS_H

testcalculus.cpp

#include "testcalculus.h"

#ifndef USE_BOOST_HEADERS
#define USE_BOOST_HEADERS
#include <boost/test/included/unit_test.hpp>
#include <boost/bind.hpp>
#endif

namespace WRayTesting
{

using ::Calculus::CartesianPoint2D;
using namespace boost::unit_test;


/**
 * Constructor
 */
TestCalculus::TestCalculus()
{

}

/**
 * Test the CartesianPoint2D class.
 */
void TestCalculus::testCartesianPoint2D()
{
    // Default constructor
    CartesianPoint2D xTestingPoint;
    BOOST_CHECK(0.0 == xTestingPoint.getX());
    BOOST_CHECK(0.0 == xTestingPoint.getY());

}

} // namespace WRayTesting

编译输出

debug/testcalculus.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:62: multiple definition of `boost::unit_test::output::compiler_log_formatter::log_start(std::ostream&, unsigned long)'
debug/main.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:62: first defined here
debug/testcalculus.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:72: multiple definition of `boost::unit_test::output::compiler_log_formatter::log_finish(std::ostream&)'
debug/main.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:72: first defined here
debug/testcalculus.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:80: multiple definition of `boost::unit_test::output::compiler_log_formatter::log_build_info(std::ostream&)'
debug/main.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:80: first defined here
debug/testcalculus.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:93: multiple definition of `boost::unit_test::output::compiler_log_formatter::test_unit_start(std::ostream&, boost::unit_test::test_unit const&)'
debug/main.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:93: first defined here
debug/testcalculus.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:103: multiple definition of `boost::unit_test::output::compiler_log_formatter::test_unit_finish(std::ostream&, boost::unit_test::test_unit const&, unsigned long)'
debug/main.o:c:/lib/boost/boost/test/impl/compiler_log_formatter.ipp:103: first defined here
...........
4

1 回答 1

6

您不能在同一测试模块内的多个文件中包含#include。您需要切换到库或将所有内容放在单个文件中

于 2011-10-04T22:12:49.363 回答