【问题标题】:boost test library: Multiple definition errorboost测试库:多重定义错误
【发布时间】:2011-10-04 21:22:43
【问题描述】:

我正在尝试在 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 标头进行一些防护,但它不起作用。我做错了什么?

main.cpp

#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
...........

【问题讨论】:

    标签: c++ unit-testing boost boost-test multiple-definition-error


    【解决方案1】:

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

    【讨论】:

    • 谢谢。这是否在文档中明确解释?您所说的也在这里重复:lists.boost.org/boost-users/2008/12/43338.php
    • 我认为这样的事情不会发生在适当的 headerguard 位置。当我使用 Boost 1.64.0 时,这个问题完全让我……措手不及。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2021-12-27
    • 2011-05-02
    • 2012-05-20
    • 2014-03-25
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多