2016-04-03 21 views
1

現在、2つのベクトルを使用して隣接行列を作成するテンプレートグラフクラスを作成しています。私はこれをテンプレートクラスの外で動作させることができますが、私はベクトルを初期化することはできません。ここでテンプレートクラスのプライベートメンバー変数ベクトルの初期化

は私が持っているものです。

#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); 
    }; 
} 

私が受け取る:数値定数の前に期待される '' または '...':

エラー:数値定数

エラーの前に期待される識別子を

これらがテンプレートクラスで初期化されない理由と、これに対する解決策は何ですか? これは、これを行う最も効率的な方法ではないかもしれませんが、私が最もよく理解する方法です。あなたが他の方法をより良くすることを考えているなら、これをやり遂げる方法を提供しますか?

+0

あなたはあなたの質問を編集し、[MCVE]含める必要があります。あなたの質問は、「完全」および「検証可能」の要件を満たしていません。 –

+0

こんにちはDavid。私があなたを助けてくれた質問を削除した後、私はあなたのプロフィールを見ていました。私はあなたがいくつかの他の質問をして答えを受け入れていないことに気付きました。個人的な利益のためにここに来て、あなたを助けてくれる人に何も返すこと、または将来あなたの質問に出くわす人々を助けることができるものを残すことは公平ではありません。私たちはコミュニティです。あなたがそれに参加したいのであれば、あなたは貢献しなければなりません。 – paddy

答えて

4

テンプレートクラスとは関係ありません。あなたはメンバ変数を初期化するためにmember initializer listを使用することができます。

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

それともdefault member initializer(C++ 11以降):

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

値を編集することで、ベクトルを初期化できない点と、OPが初期化する方法と場所を叩くことができます。 – user4581301