View Full Version : [visual c++] operatore new e costruttori con argomenti
Salve
sto scrivendo una applicazione, in cui devo creare un array di oggetti della classe DGeneric passando come argomento un intero Parameter.
La sintassi dovrebbe essere:
DGeneric* Generic;
Generic = new DGeneric[10](Parameter);
Il compilatore Visual C++ 2008 però non mi riconosce le istruzioni anzi ho trovato su internet che Visual non accetta tale costrutto.
Come posso ovviare al problema?
Grazie
ADL
Prova così:
DGeneric* Generic[10];
int i;
for( i=0; i<10; i++ )
Generic[i] = new DGeneric( i );
Sorry,:doh:
nel tentativo di semplificare la lettura, mi sono reso conto di essere stato troppo generico nella descrizione del problema. Il listato corretto è:
class DFool
{
public:
...
DFool(int i,DArgument Argument);
private:
DGeneric* Generic;
...
}
...
DFool::DFool(int i,DArgument Argument)
{
...
Generic = new DGeneric[i](Argument);
...
}
Quindi il costruttore della classe DFool deve creare un array di oggetti DGeneric inizializzati con l'oggetto Argument.:confused: La dimensione dell'array i non è nota a priori.
:muro:Il compilatore Visual C++ 2008 non riconosce la sintassi new DGeneric[...](...) (ho trovato su internet che Visual C++ non accetta tale costrutto).
:help:Come posso ovviare al problema?
ADL
tomminno
10-05-2011, 16:36
Abbastanza semplicemente così:
class DFool
{
public:
...
DFool(int i,DArgument Argument);
private:
DGeneric* Generic;
...
}
...
DFool::DFool(int i,DArgument Argument)
{
Generic = new Generic[i];
for (int j = 0; j < i; j++)
Generic[i] = new DGeneric(Argument);
...
}
Ok, ho provato:
Volee=new DVolee[GetSessionVolee()];
for(int i=0;i<GetSessionVolee();i++)Volee[i]=new DVolee(GetVoleeShoots());
dove GetSessionVolee() e GetVoleeShoots() restituiscono degli interi. Questo è quello che mi risponde il compilatore:
1> error C2679: '=' binario: non è stato trovato alcun operatore che accetti un operando destro di tipo 'Project_Amaltea::DVolee *'. È anche possibile che non vi siano conversioni accettabili.
1> c:\users\antonio\documents\visual studio 2008\project_amaltea\project_amaltea\DVolee.h(16): potrebbe essere 'Project_Amaltea::DVolee &Project_Amaltea::DVolee::operator =(const Project_Amaltea::DVolee &)'
1> durante la ricerca di corrispondenza con l'elenco di argomenti '(Project_Amaltea::DVolee, Project_Amaltea::DVolee *)'
ADL
tomminno
11-05-2011, 10:32
Scusami, nella fretta di rispondere mi sono dimenticato delle basi :fagiano:
Ovviamente Generic deve essere un array di puntatori a DGeneric
class DFool
{
public:
...
DFool(int i,DArgument Argument);
private:
DGeneric** Generic;
...
}
...
DFool::DFool(int i,DArgument Argument)
{
Generic = new DGeneric*[i];
for (int j = 0; j < i; j++)
Generic[i] = new DGeneric(Argument);
...
}
Ho capito. Mi sembra una buona idea. L'unica cosa che così ho bisogno di due indici per puntare un singolo oggetto. Confermi?
Generic[i][j].Fool();
tomminno
11-05-2011, 12:48
Ho capito. Mi sembra una buona idea. L'unica cosa che così ho bisogno di due indici per puntare un singolo oggetto. Confermi?
Generic[i][j].Fool();
E perchè mai?
Generic[i]->Fool();
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.