Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere)
Quattro modi di indossarlo, stessa app del Plaud Note Pro e integrazione con il desktop. Il registratore IA da indossare di Plaud eccelle in mobilità, ma resta vincolato all'abbonamento ed è facile da perdere
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro
Xiaomi ha portato Redmi Watch 6 anche sul mercato italiano, puntando su un display AMOLED da 2,07 pollici con picco di luminosità a 2000 nit, frame in alluminio da 9,9mm e un'autonomia dichiarata di 12 giorni. Lo smartwatch gira su HyperOS 3 e integra GPS, Bluetooth 5.4 e oltre 150 sport mode. Il tutto a meno di 100 euro
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti
Con 22 tasti, il pulsante 5D, lo Shift Mode e il sensore PixArt 3395 da 26.000 DPI, il nuovo mouse wireless di Mad Catz si rivolge in modo preciso ai giocatori di MMO e RPG. Ma chi conosce già il R.A.T. 8+ ADV si accorgerà subito di quanto i due prodotti condividano, e di dove invece divergono
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-05-2010, 17:49   #1
LacioDromBuonViaggio
Senior Member
 
L'Avatar di LacioDromBuonViaggio
 
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
[Visual C++] Strutture come variabili di classe. {Tipi misti non consentiti}

Sto smanettando con Visual C++ 2008 e vorrei semplicemente creare una classe, istanziarla settandone i valori e proporli in delle TextBox e dopodiché salvare tutto in un file binario.
Diciamo che per ora ho seri problemi perfino nella creazione di una classe:
Codice:
#pragma once

struct elenco_numeri 
{		
	char elenco[10];
	int intervallo;	
};

ref class Impianto
{
	//private di default
	int ID_impianto;	
	struct elenco_numeri elenco;

public:
	Impianto(void); //constructor

	void setID(int ID);
	int getID();	
};
Questo è il mio file impianto.h (nel relativo impianto.cpp mi limito a definire i metodi dichiarati qui).

Il mio problema è questo:
error C2814: 'Impianto::elenco_numeri': impossibile nidificare un tipo nativo in un tipo gestito 'Impianto'.
Anche togliendo la struct e inserendo un banale char elenco[10] non ne vuole sapere:
error C4368: impossibile definire 'elenco' come membro di 'Impianto' gestito: tipi misti non supportati.
Ho provato a cercare su Google e sembra che dovrei allocare prima lo spazio, ma dopo mille prove ancora zero risultati.

Visto che avrei bisogno di salvare tutto su un file binario e poi ricaricare tutto avreste altre soluzioni?
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV
LacioDromBuonViaggio è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2010, 19:23   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Stai usando C++/CLI e non C++.
Togli il ref davanti a class Impianto e vedrai che dovrebbe compilare.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2010, 23:03   #3
LacioDromBuonViaggio
Senior Member
 
L'Avatar di LacioDromBuonViaggio
 
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Stai usando C++/CLI e non C++.
Togli il ref davanti a class Impianto e vedrai che dovrebbe compilare.
Si, grazie!
Dopo varie peripezie ha compilato e posso tenere la struttura all'interno della classe. Ora però non riesco a inizializzare la struttura.

Codice:
struct elenco_numeri el;	 
char c[10]="123456789";
el.numeri=c;
el.intervallo=60;
Quando compilo ottengo
error C2106: '=': l'operando sinistro deve essere un I-value
Googlando un po' ho trovato che non è un'assegnazione corretta, però a questo punto mi chiedo come faccio a inizializzare un vettore di caratteri di dimensione fissa?
Ripeto che mi serve fissa (avrei potuto fare char *numeri) perché poi dovrò salvare un array di strutture su file binario e essere in grado di ricaricare il tutto.
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV
LacioDromBuonViaggio è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2010, 23:25   #4
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
http://www.cplusplus.com/reference/c...string/strcpy/
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2010, 23:53   #5
LacioDromBuonViaggio
Senior Member
 
L'Avatar di LacioDromBuonViaggio
 
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Avrei dovuto specificare di aver già provato la strada strcpy.
Mi ha scritto che era un'operazione 'unsafe' e di provare con strcpy_s.
A compilazione non dava più errori ma c'era un Warning che recitava che il dato era stato sovrascritto con True (infatti nella TextBox al posto di leggere la mia stringa leggevo True)
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV
LacioDromBuonViaggio è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2010, 23:59   #6
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Usa strcpy_s(), se non è un problema la portabilità.
Come si permette di sovrascriverla con True?
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 07:50   #7
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Mi viene il dubbio: ma che tipo di progetto hai creato?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 09:47   #8
LacioDromBuonViaggio
Senior Member
 
L'Avatar di LacioDromBuonViaggio
 
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Usa strcpy_s(), se non è un problema la portabilità.
Come si permette di sovrascriverla con True?
Me lo sovrascrive con True quando cerco di convertire l'array di char in una stringa da passare alla TextBox.

Codice:
1. this->new_impianto->setID(1 + rand() % 100);	
2. struct elenco_numeri el;
3. el.intervallo=60;				 
4. char c[10]="123456789";
5. el.numeri=c;
6. this->new_impianto->elenco=el;
7. this->ID->Text=Convert::ToString(this->new_impianto->getID());				
8. this->elenco->Text=Convert::ToString(this->new_impianto->elenco.numeri);
9. this->intervallo->Text=Convert::ToString(this->new_impianto->elenco.intervallo);
Riga 5 -> error C2106: '=': l'operando sinistro deve essere un I-value
Riga 8 -> warning C4800: 'char *': imposto valore booleano 'true' o 'false' (avviso di prestazioni)

Se provo a passargli direttamente il valore senza convertirlo mi dice che è impossibile convertire un char [10] con un String ^.

Quote:
Originariamente inviato da tomminno Guarda i messaggi
Mi viene il dubbio: ma che tipo di progetto hai creato?
Ho creato un semplice Progetto Windows Form. Ho creato Impianto.h e Impianto.cpp per contenere dichiarazione e definizione della classe Impianto. Il file Form.h lo crea in automatico (io ho solo creato un'istanza di Impianto nel costruttore di Form).
Sto usando Visual Studio 2008 EXPRESS e quindi posso creare davvero poca roba. Un MFC forse mi avrebbe facilitato le cose.

Comunque grazie per il supporto, proverò a semplificare ulteriormente le cose creando un progetto di Applicazione Console CLR e provando a gestire classe e struttura senza Form esterni.

Se avete qualche altre idea postatela pure...
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV
LacioDromBuonViaggio è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 09:57   #9
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da LacioDromBuonViaggio Guarda i messaggi
Ho creato un semplice Progetto Windows Form. Ho creato Impianto.h e Impianto.cpp per contenere dichiarazione e definizione della classe Impianto. Il file Form.h lo crea in automatico (io ho solo creato un'istanza di Impianto nel costruttore di Form).
Hai creato un progetto .NET. Non capisco perchè ti ostini a cercare di usare il C con .NET alle spalle.
Oltretutto già che ci sei potresti fare tutto con C#.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 10:03   #10
LacioDromBuonViaggio
Senior Member
 
L'Avatar di LacioDromBuonViaggio
 
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Hai creato un progetto .NET. Non capisco perchè ti ostini a cercare di usare il C con .NET alle spalle.
Oltretutto già che ci sei potresti fare tutto con C#.
Dovrò interfacciarmi tramite USB con una memoria flash in una scheda esterna. Il codice che carica/salva dalla flash è già scritto in C++ ed è funzionante (un progetto fatto in visual studio con un Form e qualche pulsante), quindi lo ingloberei nel resto del codice. Una questione di coerenza diciamo.
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV
LacioDromBuonViaggio è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 10:41   #11
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da LacioDromBuonViaggio Guarda i messaggi
Dovrò interfacciarmi tramite USB con una memoria flash in una scheda esterna. Il codice che carica/salva dalla flash è già scritto in C++ ed è funzionante (un progetto fatto in visual studio con un Form e qualche pulsante), quindi lo ingloberei nel resto del codice. Una questione di coerenza diciamo.
In ogni caso stai mischiando C e .NET, tanto coerente non è.

Puoi sempre usare C# con il P/Invoke.

Per quanto riguarda il tuo problema alla riga 5 devi usare strcpy o memcpy.

Invece per la visualizzazione credo sia un problema passare una stringa C all'interfaccia .NET:
Codice:
this->elenco->Text=Convert::ToString(this->new_impianto->elenco.numeri);
Dovrebbe diventare:

Codice:
this->elenco->Text = gcnew String((signed char*)this->new_impianto->elenco.numeri, 0, 10);
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 11:01   #12
LacioDromBuonViaggio
Senior Member
 
L'Avatar di LacioDromBuonViaggio
 
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
Quote:
Originariamente inviato da tomminno Guarda i messaggi
In ogni caso stai mischiando C e .NET, tanto coerente non è.
Sto usando Microsoft Visual C++ 2008 Express Edition, forse vi ho dato un'informazione errata prima.
Cambia qualcosa?
__________________
Aeroengine II BBA Black | Asus P5N-T Deluxe 780i | Intel E8400 C0 @4,050Ghz 1,35v + TR Ultra-120 eXtreme | Corsair 2x2GB PC6400 XMS2 DHX @900Mhz 2,15v | XFX 8800 GT 512MB @730/990 + TR HR-03 Rev. A | Tagan TG500-BZ | Zalman ZM-MFC2 Fan Control | WD Raptor 10000rpm 150 GB + 1,5TB | Iiyama ProLite E2607WSV
LacioDromBuonViaggio è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2010, 11:11   #13
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da LacioDromBuonViaggio Guarda i messaggi
Sto usando Microsoft Visual C++ 2008 Express Edition, forse vi ho dato un'informazione errata prima.
Cambia qualcosa?
Visual Studio è solo l'IDE.
Avendo creato un progetto di tipo Windows Forms stai usando comunque .NET
tomminno è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ADV, ma con molti più pulsanti Mad Catz M.M.O. 7+: lo stesso DNA del R.A.T. 8+ ...
Radeon RX 9070 GRE, AMD la porta in tutto il mondo | Recensione Gigabyte Gaming OC Radeon RX 9070 GRE, AMD la porta in tutto il mon...
Reolink OMVI 3i WiFi: videosorveglianza più intelligente e facile da usare Reolink OMVI 3i WiFi: videosorveglianza pi&ugrav...
Virtua Fighter è tornato e non &e...
Il ritorno di Fumito Ueda, autore di Sha...
Cooler Master svela GPU Shield, la nuova...
Samsung Galaxy S27 Pro: sarà lui ...
Così Google ha ottimizzato Chrome...
Xiaomi non cambia idea: il display poste...
LG presenta in Italia le gamme TV Micro ...
Sette anni dopo l'annuncio, The Wolf Amo...
'Non avrete aumenti': la decisione shock...
TIM lancia il Pass Mondiali DAZN: 104 pa...
Tesla Roadster, promessa o miraggio? La ...
Mark Hamilton, la tavola periodica del m...
Hanger 13 annuncia Uomo d'Onore: espansi...
La battaglia delle HBM4 entra nel vivo: ...
Dopo 12 anni torna Alien: Isolation. Ecc...
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: 23:42.


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