2017-08-19 2 views
-3

Ich lerne jetzt über Konstruktoren, Destruktoren und Speicher in einer C++ - Klasse. Ich hätte gerne einen Vektor in einer Klasse. Ich bekomme immer einen Fehler, wenn ich "Return Magnituden-> at (dimension)" schreibe. Ist etwas nicht in Ordnung mit diesem Code?eindeutige Zeiger Klassenmitglied

Edit: Sorry, der Fehler war "Anwenden -> auf eindeutigen Zeiger anstelle von rohen Zeiger", das ist von Clion, vielleicht ist die IDE falsch?

Abgesehen von dem Fehler, wickle ich es hauptsächlich in einen intelligenten Zeiger, so dass es keinen Speicherverlust gibt, oder ist das nicht möglich? Wird der Destruktor immer aufgerufen (tut mir leid, immer noch etwas über Destruktoren zu lernen).

#include <iostream> 
#include "EuclideanVector.h" 
#include "../catch.hpp" 
#include <memory> 

namespace evec{ 

    class EuclideanVector{ 
    public: 
     //constructors 
     EuclideanVector(): EuclideanVector(1){}; 
     EuclideanVector(unsigned int size): magnitudes(std::make_unique(new std::vector<double>(size,0.0))){} 

     double get(int dimension){ 
      return magnitudes->at(dimension); 
     } 
    private: 
     std::unique_ptr<std::vector<double>> magnitudes; 

    }; 
} 
+0

Welcher Fehler genau? – HolyBlackCat

+0

Was ist die genaue Fehlermeldung? Stellen Sie ein [MCVE] bereit, das das genaue Problem bitte reproduziert. – user0042

+0

Beachten Sie auch, dass Sie 'unique_ptr' hier nicht verwenden müssen. 'std :: vector' selbst ist normalerweise sehr klein (wahrscheinlich 12 oder so Bytes) und speichert seinen Inhalt im Heap. – HolyBlackCat

Antwort

0

Problem ist hier

EuclideanVector(unsigned int size): magnitudes(std::make_unique(new std::vector<double>(size,0.0))){} 

Ändern Sie diese Zeile zu

EuclideanVector(unsigned int size): magnitudes(std::make_unique<std::vector<double>>(size,0.0)){} 

Da std::make_unique eine Vorlage ist, besteht keine Notwendigkeit new zu verwenden ist.

Verwandte Themen