Forum: PC-Programmierung List of structs c++


von Frigu (Gast)


Lesenswert?

Hallo Zusammen

Ich arbeite mit C++ und dem Visual Studio 2008. Ich habe eine Producer 
(USB Daten) Consumer(MySQL Datenbank) Situation.
Als erstes, wollte ich einen einfachen Producer schreiben, der geschützt 
eine Struktur in eine Liste abspeichern soll.
1
#include "stdafx.h"
2
#include "Producer.h"
3
#include <iostream>
4
5
using namespace System;
6
using namespace System::Threading;
7
using namespace System::Collections::Generic;
8
9
typedef struct PERSON {   // Declare PERSON struct type
10
  int age;   // Declare member types
11
  long ss;
12
  float weight;
13
  char name[25];
14
}; 
15
Producer::Producer(){}
16
void Producer::ThreadProc(){
17
  List<PERSON>^ test= gcnew List<PERSON^>();      // error C3225: 
18
  //Das generische Typargument für "T" kann nicht "PERSON" sein, es muss ein Werttyp oder ein Handle für einen Referenztyp sein.
19
  while(1)  
20
  {
21
    Thread::BeginCriticalRegion();
22
    // hier möchte ich in die Liste schreiben  
23
    Thread::EndCriticalRegion();
24
    Thread::Sleep( 700 );
25
  }
26
}
wie ihr seht, gibt es einen Fehler beim erzeugen der Liste. Was mache 
ich falsch? Gibt es eine bessere Lösung, als mit einer Liste?
Für Tips bin ich sehr dankbar!
Mit freundlichen Grüssen
Frigu

von Peter (Gast)


Lesenswert?

> Was mache ich falsch?
das du nicht c++ programmierst, das ist doch c++.net - hat leider nicht 
viel mit c++ zu tun.

aber ich rate mal
> List<PERSON>^ test= gcnew List<PERSON^>();
bist du sicher das das ^ einmal hinter PERSON und einmal nicht steht?

von Frigu (Gast)


Lesenswert?

Geht so auch nicht...

von Εrnst B. (ernst)


Lesenswert?

Frigu schrieb:
> Geht so auch nicht...

WAS geht auch nicht?
Wie soll man dir helfen, wenn schon dein Problem so geheim ist, dass du 
es uns nicht mitteilst?
1
List<PERSON^>^ test= gcnew List<PERSON^>();

von Frigu (Gast)


Lesenswert?

Hallo Ernst,
ich meinte, so geht es auch nicht:
List<PERSON>^ test= gcnew List<PERSON>();
Ich weiss nicht, was für Informationen du noch benötigst. Geheim ist gar 
nichts...;)

von Εrnst B. (ernst)


Lesenswert?

> Ich weiss nicht, was für Informationen du noch benötigst.
Na, was du versucht hast, und was nicht ging. Mit Fehlermeldung.

Warum eigentlich nicht einfach
1
List<PERSON> test;

Oder wenns Pointer/Refs sein sollen, was ist mit der oben geposteten 
Variante:
1
List<PERSON^>^ test= gcnew List<PERSON^>();

von Frigu (Gast)


Lesenswert?

1
List<PERSON^>^ test= gcnew List<PERSON^>();
gibt: error C3699: "^": Diese Referenzierung kann nicht für den Typ 
"PERSON" verwendet werden.
1
List<PERSON> test;

gibt: error C3225: Das generische Typargument für "T" kann nicht 
"PERSON" sein, es muss ein Werttyp oder ein Handle für einen Referenztyp 
sein.



ich muss das ganze wohl aufgeben... Trotzdem danke!

von Εrnst B. (ernst)


Lesenswert?

d.H. schon "PERSON^" geht nicht, die Liste ist erstmal garnicht schuld.
Nimm statt der Struct ein Object ("ref class PERSON", "__gc class 
PERSON", ...,  oder so).

von Frigu (Gast)


Lesenswert?

Hallo Ernst
Ich danke dir. Mit dem Objekt funktioniert es.
Mit besten Grüssen
Frigu

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.