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
codice:
/*
* 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_ */
Item.cpp
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;
}
;
e come detto fino a qui funziona tutto.
Creando ItemTest.h
codice:
#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*/
e ItemTest.cpp
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);
}
Mi da errore:
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?