2015-05-14 65 views
1

我有一個自定義模板,我想在我的C++類中進行初始化。我想直接設置它的大小。構造C++類中的自定義模板

模板類,vector3d.hh

template <typename T> 
class vector3d { 
public: 
vector3d(size_t d1=0, size_t d2=0, size_t d3=0, T const & t=T()) : 
    d1(d1), d2(d2), d3(d3), data(d1*d2*d3, t){} 

T & operator()(size_t i, size_t j, size_t k) { 
    return data[i*d2*d3 + j*d3 + k]; 
} 

T const & operator()(size_t i, size_t j, size_t k) const { 
    return data[i*d2*d3 + j*d3 + k]; 
} 

private: 
    size_t d1,d2,d3; 
    std::vector<T> data; 
}; 

類中,我wouldl喜歡初始化我的模板變量:

#include "vector3d.hh" 
class foo{ 
public: 
    vector3d<int> testvector(1000,2000,3000); 
} 

但是,試圖編譯這段代碼生成以下錯誤在我的初始化指向vector3d:

error: expected identifier before numeric constant

我知道這不是我們如何構建這些東西在課堂上。這樣做的適當的錯誤是什麼?假設我不能使用新的C++ 11標準。

+1

爲您初始化''中vector3d'的構造data'你應該初始化''中foo'的構造testvector',用同樣的方法。 – Petr

回答

4

「假設我不能使用新的C++ 11標準」 - 在這種情況下,您不能在其聲明中初始化非靜態成員。你必須做在構造函數中:

vector3d<int> testvector; 
foo() : testvector(1000,2000,3000) {} 

在現代C++中,你可以在那裏初始化,但不使用()。在一流的初始化只能使用={}

vector3d<int> testvector{1000,2000,3000};