2014-06-22 59 views
0

我正在寫一個類,我需要一個2D數組並且想要使用2D向量。但是,我需要首先將2D數組聲明爲private,然後在構造函數中分配內存。當我這樣做時,我得到一個「沒有適當的操作符()或類型轉換函數的類類型對象的調用,以指向函數類型」錯誤。任何人都可以幫我嗎?爲向量分配內存<vector<>>簡短的方式

class Test { 

private: 
    vector<vector<unsigned int> > DynTable; 

public: 
    Test(const string &s1, const string &s2) { 
     const size_t len1 = s1.size(), len2 = s2.size(); 
     DynTable(len1 + 1, vector<unsigned int>(len2 + 1)); 
+0

你知道'vector >'通常是一個緩慢的想法,除非它是const?由於創建元素的方式,如果修改內容,您的內部向量會經常被複制。使用一維數組和x-y座標到線性座標的映射通常會更快。 – schlenk

+0

好的,這可能是但現在不是問題。我工作的琴絃有點短;) – StarFighter

回答

4

DynTable是一個變量。你的代碼是像做:

int y; 
y(5); 

表達VARIABLENAME(表達)意味着調用函數。但是yDynTable不是函數,因此是錯誤。

我想你的意思是使用一個構造函數初始化程序列表:

Test(const string &s1, const string &s2) 
    : DynTable(s1.size() + 1, vector<unsigned int>(s2.size() + 1)) 
{ 
    // other code here perhaps 
} 

在構造函數初始化程序列表是不表達,這是初始化語法。在初始化列表的上下文中,()分隔用於初始化變量的參數。

另一種選擇是寫在構造函數體,

DynTable = vector<vector<unsigned int>>(len1 + 1, vector<unsigned int>(len2 + 1)); 

然而,這是糟糕的,因爲它是更多的輸入,以及它默認的構造,然後分配,而不是隻構建你想要什麼直。

+0

啊,當然,這是一個愚蠢的失敗。感謝您的好解釋,幫助我很多:) – StarFighter

相關問題