Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
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
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


Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
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...
Roscosmos aggiorna le tempistiche per la...
Confermato il ritardo delle missioni rob...
L'Intelligenza Artificiale ora può...
Il data center del futuro secondo Huawei...
Spesa a domicilio senza conducente: robo...
Satoshi Nakamoto ha finalmente un volto?...
La Corea del Sud taglia fuori i bus elet...
GoPro taglia ancora: licenziato il 23% d...
Muse S Athena: la fascia che ti legge ne...
PS5 Pro e PSSR 2.0: tutti i giochi compa...
Dimensity 9600 Pro promette prestazioni ...
BMW i7 2026 adotta celle cilindriche Gen...
Cyberpunk 2077 si aggiorna su PS5 Pro co...
Valve porta Steam Link su Vision Pro per...
Google Maps: ufficiali 3 novità c...
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: 06:40.


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