|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2163
|
[C++] Errore Definizione Multipla con cppUnitTest in Eclipse
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_ */
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 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*/
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
__________________
Vendo...nulla. Cerco...la felicità. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Suppongo che il colpevole sia lui:
Codice:
#include "../src/Item.cpp" |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2163
|
I file test vengono creati in automatico dal plugin ECUT per fare i test... Se faccio lo stesso lavoro con 2 file sample dati con ECUT, funziona.
__________________
Vendo...nulla. Cerco...la felicità. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quindi dovresti rivedere il progetto, magari è già incluso quel file e con l'include ottieni la doppia compilazione. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2163
|
Quote:
EDIT Se elimino gli include dal Test.cpp compila tutto. Però ora, non avendo l'include del file Item.cpp, come faccio a instanziare un oggetto di tipo Item nella classe ItemTest.cpp?
__________________
Vendo...nulla. Cerco...la felicità. Ultima modifica di Emaborsa : 30-03-2011 alle 21:10. |
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quasi sicuramente il file è già incluso nel progetto che stai compilando. Quote:
Includere i file cpp è una pratica decisamente sconsigliata, oltre che perfettamente inutile. Mi stupisce come un tool automatico possa adottare tale strategia. |
||
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2163
|
Quote:
__________________
Vendo...nulla. Cerco...la felicità. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:29.




















