2016-04-03 12 views
1

Ich arbeite derzeit an einer Vorlage Grafikklasse, die zwei Vektoren verwendet, um eine Adjazenzmatrix zu erstellen. Ich kann dies außerhalb der Template-Klasse erreichen, aber ich kann die Vektoren nicht initialisieren. HierInitialisieren privaten Member Variablenvektor in einer Vorlagenklasse

ist, was ich habe:

#include <stdexcept> 
#include <vector> 
#include <list> 
#include <string> 

using namespace std; 

namespace GraphNameSpace 
{ 
    template <class T> 
    class Graph 
    { 
    private: 
    vector<int> colOfRow(100); 
    vector<vector<int> > matrix(100); 
    }; 
} 

I erhalten:

Fehler: erwartete Kennung vor numerischen Konstante

Fehler: erwartet '' oder '...' vor numerischer Konstante

Was ist der Grund, dass diese nicht in der Vorlagenklasse initialisiert werden, und was wäre eine Lösung dafür? Ich weiß, dass dies nicht der effizienteste Weg ist, es zu tun, aber es ist die Art, wie ich es am besten verstehe. Wenn Sie einen anderen Weg betrachten würden, besser zu sein, würden Sie so vorgehen, wie Sie das tun würden?

+0

Sie benötigen eine Frage und umfassen eine [MCVE] zu bearbeiten. Ihre Frage erfüllt nicht die Anforderungen für den "vollständigen" und "überprüfbaren" Teil. –

+0

Hallo David. Ich habe mir dein Profil angesehen, nachdem du eine Frage gelöscht hast, mit der ich dir geholfen habe. Ich bemerke, dass Sie mehrere andere Fragen gestellt und keine Antworten akzeptiert haben. Es ist nicht fair, zum persönlichen Vorteil hierher zu kommen und dann den Menschen, die Ihnen helfen, nichts zurückzugeben oder etwas zurückzulassen, das Menschen helfen kann, die in Zukunft auf Ihre Frage stoßen. Wir sind eine Gemeinschaft, und wenn Sie ein Teil davon sein wollen, sollten Sie beitragen. – paddy

Antwort

4

Es hat nichts mit Vorlagenklasse zu tun. Sie könnten member initializer list verwenden, um Elementvariablen zu initialisieren:

namespace GraphNameSpace 
{ 
    template <class T> 
    class Graph 
    { 
    private: 
    vector<int> colOfRow; 
    vector<vector<int> > matrix; 
    public: 
    Graph() : colOfRow(100), matrix(100) {} 
    }; 
} 

Oder default member initializer (seit C++ 11):

namespace GraphNameSpace 
{ 
    template <class T> 
    class Graph 
    { 
    private: 
    vector<int> colOfRow{100}; 
    vector<vector<int> > matrix{100}; 
    }; 
} 
+0

Es lohnt sich zu editieren, um den Punkt zu besiegen, an dem der Vektor nicht initialisiert werden kann, wie und wo OP versucht, es zu initialisieren. – user4581301

Verwandte Themen