Ho creato unporgetto C++, scritto file c e h. Compilo e tutto funziona. Se vado a creare dei testCase usando ECUT mi da 'multiple definition of' e non riesco a capire il perchè. Vi posto i codici:
Item.h
Item.cppcodice:/* * Item.h * * Created on: Mar 30, 2011 * Author: manuel */ #include <stdio.h> #include <fstream> #include <string> #ifndef ITEM_H_ #define ITEM_H_ class Item { private: std::string name; int price; FILE picture; public: Item(const std::string&, int&, FILE&); int & getPrice(); std::string & getName(); FILE & getPicture(); ~Item(); }; #endif /* ITEM_H_ */
e come detto fino a qui funziona tutto.codice:/* * Item.cpp * * Created on: Mar 30, 2011 * Author: manuel */ #include "Item.h" using namespace std; Item::Item(const string& aName, int& aPrice, FILE& aFile) { name = aName; price = aPrice; picture = aFile; } ; int& Item::getPrice() { return price; } ; string& Item::getName() { return name; } ; FILE& Item::getPicture() { return picture; } ;
Creando ItemTest.h
e ItemTest.cppcodice:#ifndef TEST_ItemTest #define TEST_ItemTest #ifdef ECUT_MAIN #include "cppunit/extensions/HelperMacros.h" class ItemTest : public CPPUNIT_NS::TestFixture { public: void setUp(); void tearDown(); void testItem__Item(); void testItem__getPrice(); void testItem__getName(); void testItem__getPicture(); CPPUNIT_TEST_SUITE(ItemTest); CPPUNIT_TEST(testItem__Item); CPPUNIT_TEST(testItem__getPrice); CPPUNIT_TEST(testItem__getName); CPPUNIT_TEST(testItem__getPicture); CPPUNIT_TEST_SUITE_END(); }; #endif /* ECUT_MAIN */ #endif /*ITEMTEST*/
Mi da errore:codice:#ifdef ECUT_MAIN #include "ItemTest.h" #include "../src/Item.cpp" CPPUNIT_TEST_SUITE_REGISTRATION(ItemTest); void ItemTest::setUp() { } void ItemTest::tearDown() { } void ItemTest::testItem__Item() { CPPUNIT_ASSERT(false); }
codice:./src/Item.o: In function `Item': /home/manuel/Eclipse/Test/ECUTTest/../src/Item.cpp:11: multiple definition of `Item::Item(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int&, _IO_FILE&)' ./test/ItemTest.o:/home/manuel/Eclipse/Test/ECUTTest/../test/../src/Item.cpp:11: first defined here ./src/Item.o: In function `Item': /home/manuel/Eclipse/Test/ECUTTest/../src/Item.cpp:11: multiple definition of `Item::Item(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int&, _IO_FILE&)' ./test/ItemTest.o:/home/manuel/Eclipse/Test/ECUTTest/../test/../src/Item.cpp:11: first defined here ./src/Item.o: In function `Item::getPrice()': /home/manuel/Eclipse/Test/ECUTTest/../src/Item.cpp:18: multiple definition of `Item::getPrice()' ./test/ItemTest.o:/home/manuel/Eclipse/Test/ECUTTest/../test/../src/Item.cpp:18: first defined here ./src/Item.o: In function `Item::getName()': /home/manuel/Eclipse/Test/ECUTTest/../src/Item.cpp:23: multiple definition of `Item::getName()' ./test/ItemTest.o:/home/manuel/Eclipse/Test/ECUTTest/../test/../src/Item.cpp:23: first defined here ./src/Item.o: In function `Item::getPicture()': /home/manuel/Eclipse/Test/ECUTTest/../src/Item.cpp:28: multiple definition of `Item::getPicture()' ./test/ItemTest.o:/home/manuel/Eclipse/Test/ECUTTest/../test/../src/Item.cpp:28: first defined here
Mi è stato detto che il problema potrebbe stare nel "#include "../src/Item.cpp"" dell'ItemTes.cpp, in effetti se lo elimino il tutto viene compilato, però ovviamente sempre nel ItemTest.cpp non mi è permesso istanziare un oggetto Item, perciò non posso scrivere i test. Ci sarà pure un modo o?


Rispondi quotando