5

QTCreator for Windows で作成したライブラリ (Calculus) をテストしようとしています。

テスト用に、メイン ファイルと別のファイルにクラスを作成しました。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 以上の) エラーが発生します。以下に私のファイルがあります。ご覧のとおり、ブースト ヘッダーの周囲にもガードを配置しようとしましたが、うまくいきません。私は何を間違っていますか?

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

1 に答える 1

6

同じテストモジュール内の複数のファイルに#includeを含めることはできません。ライブラリに切り替えるか、すべてを1つのファイルに入れる必要があります

于 2011-10-04T22:12:49.363 に答える