2017-04-05 7 views
1

ich diese Klasse habe:C++ | Kann keine Elemente in der Klasse Mitglied Vektor hinzufügen

class CAppFramework : public IBaseApp 
{ 
public: 
    CAppFramework(std::initializer_list< CClientApp* > input); 
    CAppFramework(); 
    ~CAppFramework(); 

    void Create() override; 
    void Release() override; 

    std::vector< CClientApp* > GetClientApps(); 

private: 
    std::vector< CClientApp* > m_ClientApps; 
}; 

Wenn ich versuche, ein Element in dem m_ClientApps Vektor wie folgen hinzuzufügen:

int main() 
{ 
    CAppFramework appframework = CAppFramework(); 
    appframework.GetClientApps().push_back(new CTest()); 

    appframework.Create(); 
    appframework.Release(); 

    return 0; 
} 

Es schlägt fehl. Die Größe des Vektors bleibt 0.

Allerdings, wenn ich Artikel wie folgt hinzu:

int main() 
{ 
    CAppFramework appframework = CAppFramework({ new CTest() }); 

    appframework.Create(); 
    appframework.Release(); 

    return 0; 
} 

Der Artikel erfolgreich hinzugefügt wird immer. Warum das? Ich hoffe, dass mir jemand helfen kann.

Tschüss und einen schönen Tag!

+2

'GetClientApps' eine Kopie zurückgibt, wenn es einen Verweis zurückkommen sollte. – nwp

Antwort

1
std::vector< CClientApp* > GetClientApps(); 

Dies gibt den Vektor von Wert. Eine Kopie des Vektors wird tatsächlich für den Rückgabewert dieser Funktion erstellt.

appframework.GetClientApps().push_back(new CTest()); 

Diese push_back() s einen neuen Wert in ein Vektorobjekt, der zurückgegeben wird, die eine Kopie des ursprünglichen Vektors ist, ein temporärer Wert, der unmittelbar am Ende dieses Ausdrucks zerstört wird. Die push_back() leistet nichts Sinnvolles.

benötigen Sie den Vektor durch Bezugnahme zurückzukehren, anstatt Wert:

std::vector< CClientApp* > &GetClientApps(); 
+0

Ich sehe, vielen Dank! – user7814615

+0

Sie sind nicht zufälligerweise jemand mit Java-Hintergrund, der versucht, C++ zu lernen? Wenn dies der Fall ist, müssen Sie alles, was Sie über Objekte in Java wissen, schnell wieder lernen. Sonst kommst du immer wieder hierher ... –

+0

Ja, ich komme aus Java: |. Es ist ziemlich bedauerlich, dass ich es vorher gelernt habe. – user7814615

Verwandte Themen