Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-03-2011, 11:22   #1
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
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_ */
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
__________________
Vendo...nulla.
Cerco...la felicità
.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2011, 11:55   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Suppongo che il colpevole sia lui:

Codice:
#include "../src/Item.cpp"
Perchè mai fare l'include di un file cpp?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2011, 16:30   #3
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2163
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Suppongo che il colpevole sia lui:

Codice:
#include "../src/Item.cpp"
Perchè mai fare l'include di un file cpp?
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à
.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2011, 16:51   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
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.
Non conosco ECUT ma sicuramente stai compilando 2 volte il file Item.cpp.
Quindi dovresti rivedere il progetto, magari è già incluso quel file e con l'include ottieni la doppia compilazione.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2011, 19:36   #5
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2163
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Non conosco ECUT ma sicuramente stai compilando 2 volte il file Item.cpp.
Quindi dovresti rivedere il progetto, magari è già incluso quel file e con l'include ottieni la doppia compilazione.
Ammetto che non dono esperto di C++, ma la tua frase mi fa capire che da il problema sta nel fatto che faccio include 2 volte dello stesso file, e per questo da errore. Giusto?

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 20:10.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2011, 20:47   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Emaborsa Guarda i messaggi
Ammetto che non dono esperto di C++, ma la tua frase mi fa capire che da il problema sta nel fatto che faccio include 2 volte dello stesso file, e per questo da errore. Giusto?
Esattamente.
Quasi sicuramente il file è già incluso nel progetto che stai compilando.

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?
Semplicemente includendo Item.h al posto di Item.cpp in ItemTest.cpp.
Includere i file cpp è una pratica decisamente sconsigliata, oltre che perfettamente inutile.
Mi stupisce come un tool automatico possa adottare tale strategia.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 30-03-2011, 20:55   #7
Emaborsa
Senior Member
 
L'Avatar di Emaborsa
 
Iscritto dal: Sep 2004
Città: Bolzano
Messaggi: 2163
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Esattamente.
Quasi sicuramente il file è già incluso nel progetto che stai compilando.



Semplicemente includendo Item.h al posto di Item.cpp in ItemTest.cpp.
Includere i file cpp è una pratica decisamente sconsigliata, oltre che perfettamente inutile.
Mi stupisce come un tool automatico possa adottare tale strategia.
Porca miseria hai ragione Sembra funzionare. Ora faccio delle prove
__________________
Vendo...nulla.
Cerco...la felicità
.
Emaborsa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Le 10 migliori offerte Amazon di Pasqua:...
Nuove fotografie dagli astronauti di Art...
La toilette della capsula Orion Integrit...
GeForce NOW: ecco tutte le novità in arr...
Il Realme 16 5G debutta sul mercato glob...
HONOR svela tre nuovi tablet: il più int...
Tineco Floor One S9 Master: aspira e pul...
Vivo X300 Ultra, il lancio globale è ini...
Offerte robot aspirapolvere Amazon: ECOV...
L'AI genera codice in 8 minuti e i senio...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v