[C++ / CLI] Array initialisatie list met class

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Thomas254
  • Registratie: Maart 2009
  • Laatst online: 08-09 10:04
Ik ben sinds kort begonnen met C++ met CLI (heb wel basiskennis standaard C++).

Als ik zonder CLI programmeer heb ik wel eens een class waar ik een array van wilde maken en die meteen ook initialiseren.

zoiets als:

code:
1
2
3
4
5
6
7
8
9
10
11
class test
{
int x;
int y;
};

test i[] = 
{
     {1, 1},
     {2, 2},
};


Nu ik dus met CLI werk moet ik sommige classen als 'managed' declareren (met ref)

als ik van die class een array wil maken kan dat niet op de gewone manier, maar moet dat met 'array'. Alleen lukt het bovenstaande niet.

voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
ref class test
{
String ^str;
int y;
};


array <test^>^ i = 
{
   {"", 1},
};


Als ik dit doe krijg ik een compiler error: error C2440: 'initializing' : cannot convert from 'const char [1]' to 'test ^'

Kan iemand mij zeggen hoe ik op de juiste manier zon list kan maken.

[ Voor 4% gewijzigd door Thomas254 op 06-01-2010 00:43 ]


Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
C++:
1
2
3
4
5
6
7
8
9
10
11
ref class test
{
String ^str;
int y;
};


array <test^>^ i = gcnew array<test^>()
{
   gcnew test{"", 1},
};


Ik heb nooit echt CLI gebruikt hiermee maar het voorbeeld hierboven is de vertaling van hoe het in C# gaat en ik geloof dat het meeste hetzelfde is daarin. Zou kunnen zijn dat je class nu een constructor nodig heeft die deze waardes aanvaard.

[ Voor 52% gewijzigd door NC83 op 06-01-2010 02:16 ]

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


Acties:
  • 0 Henk 'm!

  • Thomas254
  • Registratie: Maart 2009
  • Laatst online: 08-09 10:04
Bedankt voor je reactie, op die manier was ik nog neit gekomen.

Als gcnew test{"", 1}, vervangt door gcnew test("", 1), dan werkt het inderdaad. :)

Het is wel anders dan de 'oude' manier met een normale array, maar het ziet er iets beter uit dan eerst de array declareren, en dan vervolgens daaronder alles apart te initialiseren.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dit ligt niet eens aan CLI, precies hetzelfde krijg je in gewoon C++ ook. Het verschil is namelijk dat je in eerste instantie een array van tests bij value hebt, en in het tweede geval heb je pointers naar test. Dus ook in normaal C++ wordt het:
C++:
1
2
3
4
5
test* i[] =  // let op de pointer hier
{
    new test("", 1),
    new test("", 2)
};


Je oude manier werkt wel, maar dan moet je wel een array van value types hebben, het punt is alleen dat jouw test class geen value type is.

[ Voor 17% gewijzigd door .oisyn op 06-01-2010 18:35 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Thomas254
  • Registratie: Maart 2009
  • Laatst online: 08-09 10:04
[b].oisyn schreef op woensdag 06 januari 2010 @ 18:26


Je oude manier werkt wel, maar dan moet je wel een array van value types hebben, het punt is alleen dat jouw test class geen value type is.
Wat bedoel je precies met 'een array van value types' ?

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01:28

.oisyn

Moderator Devschuur®

Demotivational Speaker

C++:
1
2
int a[] = { 1, 2, 3 }; // jouw voorbeeld, array van values
int * b[] = { new int(1), new int(2), new int(3) }; // jouw werkelijke array, array van pointers

Heeft dus niets met een verschil tussen C++ en C++/CLI te maken, maar puur met het feit dat je in je C++ voorbeeld een array van values gebruikt terwijl je in je C++/CLI code een array van pointers hebt (of eigenlijk managed references, maar het principe is hetzelfde).

Dat komt omdat je een array<test^> gebruikt, en niet een array<test>. Die laatste kan ook niet, want test is een ref class, en geen value class (en .Net verbiedt dat je ref classes als value gebruikt)

[ Voor 61% gewijzigd door .oisyn op 06-01-2010 18:41 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Thomas254
  • Registratie: Maart 2009
  • Laatst online: 08-09 10:04
Aha, nu is het helder, bedankt!
Pagina: 1