|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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();
};
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 |
|
|
|
|
|
#2 |
|
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. |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
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; 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 |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
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 |
|
|
|
|
|
|
#6 |
|
Senior Member
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! |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Mi viene il dubbio: ma che tipo di progetto hai creato?
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
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 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 ^. 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 |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Oltretutto già che ci sei potresti fare tutto con C#. |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
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 |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
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); Codice:
this->elenco->Text = gcnew String((signed char*)this->new_impianto->elenco.numeri, 0, 10); |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Jul 2008
Città: Sardegna
Messaggi: 1005
|
Quote:
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 |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:01.




















