2016-12-08 4 views
-6

meinen CodeWie konvertiert man Int32 * zu Int32? Dies ist

int32 *iPos; 
status =scriptData.GetInt32(iPos); 
int32 position=iPos; 

Aber es error C2440: 'initializing' : cannot convert from 'int32 *' to 'int32'

Wie konvertiert Int32 * zu Int32 auftreten?

+0

Jede anständige C++ Buch/Tutorial sagen Wie. Sie dereferenzieren den Zeiger: 'int position = * iPos;'. –

+0

Hatten Sie versucht "Position = * iPos;"? – Amadeus

+0

Konvertieren? Bist du dir wirklich sicher, dass du das machen willst? Ich habe den Eindruck, dass Sie nicht verstehen, was Zeiger tun .... (oder verwenden Sie das Wort "konvertieren" auf eine seltsame Art und Weise) Und verwenden wahrscheinlich auch 'GetInt32' falsch. – Hurkyl

Antwort

2

Gerade dereferenzieren:

int32 position = *iPos; 

Aber die elegantere Version ist, den & Operator zu verwenden, um einen Zeiger auf position zu erhalten:

int32 position; 
status = scriptData.GetInt32(&position); 
+0

danke: int32 position; status = scriptData.GetInt32 (& Position); –

0

Vielleicht sollten Sie dies tun:

int32 position = *ipos; 

(* IPOs) geben den Wert des Zeigers (& IPOs) geben die Adresse des Zeigers

+0

danke Ihre Antwort. –

0

Sie sollten offensichtlich auf Int32 Zeiger Fabrik wie nächste Versuch:

class Int32Factory { 
public: 
    static Int32Factory *instance() { 
     static std::unique_ptr<Int32Factory> s_s(new Int32Factory()); 
     return s_s.get(); 
    } 

    ~Int32Factory() { 
     for (auto i : m_items) { 
      delete i; 
     } 
    } 

    int32 *getInt() { 
     m_items.push_back(new int32()); 
     return m_items.back(); 
    } 

private: 
    std::vector<int32 *> m_items; 

    Int32Factory() { } 
}; 

Es einfach ist, zu verwenden, die nächsten Schritte nur tun: Sie

int32 *iPos = Int32Factory::instance()->getInt(); 
status = scriptData.GetInt32(iPos); 
+0

Sieht ein bisschen wie ein Speicherleckgenerator aus. Es gibt keine Möglichkeit, Mitglieder, die nicht mehr verwendet werden, selbst mit einer releaseInt() - Funktion zu bereinigen, es sei denn, Sie möchten eine Buchhaltung hinzufügen, um zu überprüfen, ob alle neuesten Mitglieder freigegeben sind. – stefaanv

+0

Ich stimme dir zu. Anstatt Vektorzeiger zu verwenden, würde ich lieber shared_ptr oder ähnliches erstellen. –

+0

Es scheint nicht nur als Ersatz für neue (oder make_shared/make_unique) offensichtlich. – stefaanv

Verwandte Themen