2011-05-15 149 views
3

我正在嘗試使用MTL編寫一個小程序,但是當我嘗試使MTL Matrix成爲類的成員時,我遇到了上述錯誤。C++:數字常量之前的預期標識符

#include <boost/numeric/mtl/mtl.hpp> 

class myClass 
{ 
private: 
    mtl::dense2D<double> Ke(6,6); 
}; 

然而,在同一聲明中沒有問題的main():

#include <boost/numeric/mtl/mtl.hpp> 

int main(int argc, char** argv) 
{ 
    mtl::dense2D<double> Ke(6,6); 
    return 0;  
} 

我很新的C++,我不認爲這是真正關係到MTL ,但那是我發生錯誤的地方。

+0

是MTL還是通過加速支持?我在網站上找不到它,並且在論壇上只有歷史熱點。 – 2011-05-15 13:57:26

+0

我不'認爲它是。但我認爲它正在廣泛使用Bo​​ost。另外,創作者可能希望有一天它會被接受爲提升。 – Psirus 2011-05-15 15:29:58

回答

6

你需要在構造函數的初始化列表中做到這一點。

class myClass { 
    mtl::dense2D<double> Ke; 
public: 
    myClass() : Ke(mtl::dense2D<double>(6, 6)) { } 
}; 
+0

嘿,很好找。我不知何故只是看到缺少'使用命名空間提升;'或'boost ::'。 :P – Xeo 2011-05-15 13:44:47

+7

是不是myClass():Ke(6,6){}夠了? – ralphtheninja 2011-05-15 13:45:49

4

因爲當你聲明

mtl::dense2D<double> Ke; 

你只應該聲明它,而不是創建它。這是C++中的構造函數的作業:

class myClass 
{ 
public: 
    myClass() // constructor 
     : Ke(6, 6) // here we use the constructor initializer 
    { 
    } 
private: 
    mtl::dense2D<double> Ke; // declaration 
}; 
+0

我不確定,這會編譯:) – 2011-05-15 13:45:09

+0

@Kiril:原因是什麼?我沒有看到這個代碼有什麼問題。 – Xeo 2011-05-15 13:50:08

+0

@Kiril:實際上在這裏。 – 2011-05-15 13:51:29

3

您不能在類作用域中初始化變量,您需要在構造函數中完成它。更改此:

class myClass 
{ 
private: 
    mtl::dense2D<double> Ke(6,6); 
}; 

本 -

class myClass 
{ 
public: 
    myClass() : Ke(6,6) { } 
private: 
    mtl::dense2D<double> Ke; 
}; 
相關問題