Weisen Sie einem dereferenzierten Void-Zeiger Werte zu

8

Ich mache eine Klasse in C ++, die jede Art von Variablen unterstützt, um mir in einem zukünftigen Projekt zu helfen. Die Sache ist, wenn ich versuche, einer void* -Variable einen Wert zuzuweisen, bekomme ich den Fehler: void* ist kein Zeiger-zu-Objekt-Typ. Hier ist der Code:

%Vor%

Ich sehe es so, als ob ich versuche, den Wert von x in dem für a reservierten Speicherblock zuzuweisen. Ich möchte, dass der in x gespeicherte Wert im Speicherblock von a gespeichert wird. Kann mir irgendjemand helfen?

    
Ruy 16.08.2011, 16:08
quelle

6 Antworten

5

Sie möchten wahrscheinlich Folgendes tun:

%Vor%     
karlphillip 16.08.2011 16:13
quelle
3

Sie machen es zu kompliziert. Geben Sie a als int * an, oder besser: deklarieren Sie a als int *, um damit zu beginnen.

%Vor%

Es gibt einfachere Möglichkeiten, ähnliche Dinge in C ++ zu tun, aber Sie scheinen hauptsächlich in der Pointer-Syntax gefangen zu sein.

    
Charlie Martin 16.08.2011 16:11
quelle
3

Du brauchst den Cast als *(int*)(a) = x; .

    
Asha 16.08.2011 16:11
quelle
3

Zuerst müssen Sie a auf den entsprechenden Zeigertyp und dann auf die Referenz verweisen. Zweitens, verwenden Sie eine Vorlage - dafür sind sie da. Drittens, malloc und frei ist baaaad, OK? Nicht. Wenn Sie denken, dass dies ein guter Code ist, benötigen Sie ernsthafte Korrektur C ++. Viertens ist dies bereits geschehen - boost::any dient diesem Zweck.

    
Puppy 16.08.2011 16:10
quelle
0

Es gibt andere elegante Möglichkeiten, eine Variable mit verschiedenen Typen zuzuweisen. Für Ihre aktuelle Frage können Sie dem Standardweg folgen wie,

%Vor%

Oder nur für dieses Problem speziell,

%Vor%

[Hinweis: Wenn Sie dies in Ihrer aktuellen Lösung tun,

%Vor%

könnte die strenge Aliasing-Regel verletzen.]

    
iammilind 16.08.2011 16:13
quelle
0

Die Größe der Lücke unterscheidet sich von der Größe der int. Du kannst das nicht tun.

    
Tae-Sung Shin 16.08.2011 16:23
quelle

Tags und Links