2011-03-07 152 views
0

我有任務,在那裏我必須寫一個類多維矢量C++模板問題

有人告訴我,我必須使用模板,這完全是新的給我,準確的說,然後我必須用template <unsigned short n>,其中n定義了我的向量具有多少個維度。

到目前爲止,我有這一點,但它不工作:

vector.h

#include <vector> 

template <unsigned short n> 
class Vector { 
public: 
    std::vector<float> coords; 

    Vector<n>(); 

}; 

vector.cpp

#include "vector.h" 

Vector<n>() { 
for(int i = 0; i < n; i++) { 
    coords.push_back(0.0); 
} 
}; 

我的默認構造函數使得矢量線爲0.0

我得到向量的錯誤。 CPP C:\CodeBlocks\kool\praks3\vector.cpp|3|error: 'n' was not declared in this scope|

此外 ..why我必須在這裏使用的模板,我讀的模板,教程,並用它來優化代碼,減少代碼repeation,但這裏的n必須始終無符號短

當我看看這個例子,我明白我使用模板,因爲我的數據類型可以是任何我想要的,我可以使用它來整數,雙打或任何種類的數字

但目前使用模板的重點是什麼,當我定義了我必須使用哪種數據類型?

template <class dataType> 
dataType GetMin (dataType a, dataType b) { 
return ((a < b) ? a : b); 
} 

如果有什麼不清楚的地方,隨時向我提問! ,因爲有很多困惑對我:)

+7

很難相信你使用了一個功能,你有 - 顯然,還沒有研究。 – 2011-03-07 17:17:07

+3

如果模板對您來說是新的,那麼它們可能是您班級中* everyone的新手,並且使用模板的要求可能是練習的目的*。如果有什麼你不瞭解你的課程,你應該去和你的老師談談。這就是他或她在那裏。你會得到專門針對你的知識水平的答案,並將其放入課程大綱的其餘部分。 – 2011-03-07 17:21:12

+0

是的,我們還沒有研究它,我們假設谷歌和使用論壇來了解它,我們有一些例子等,但我不明白這一點。所以我想我做我的研究 – Jaanus 2011-03-07 17:27:49

回答

2

你真的應該閱讀了關於模板第一:http://www.cplusplus.com/doc/tutorial/templates/

模板是不錯的,因爲它們使您可以用泛型類型的工作。例如,使用相同的代碼獲取兩個對象(int,long,float等)的最大值或最小值。在你的情況下,使用模板是一個好主意,因爲它可以讓你有int,float,double或任何你喜歡的向量。

另一件事,使用模板時,最容易將頭文件和實現保存在同一文件(頭文件)中。

您的構造函數Vector<n>();錯誤地指出。因爲你的班級之前有template <unsigned short n>,所以你寫在裏面的所有內容都將使用該模板。

template <unsigned short n> 
class Vector { 
public: 
    // Here..  
}; 

所以,只需像通常那樣編寫構造函數即可。

2

你可能被告知在這裏使用一個模板不是因爲它是正確的做,但因爲這樣做應該希望教你如何使用它們。具體來說,教師正試圖向您展示模板可以採用某些非類型參數。

雖然你的問題與模板很少有關,但更多的還不瞭解如何構建C++類。當你在一個類中定義一個函數,你需要使用範圍語法:

// non-templated vector 
Vector::Vector() 
{ 
    ... 
} 

這就是問題1.問題2是,你想在CPP文件中定義模板功能。你不能這樣做。您必須將函數定義放在標題中(減少少數情況下,我會讓您的老師稍後再繼續)。

你需要了解接下來的事情是,std::vector已經擁有了大量的初始化,您可以改用for循環:

std::vector<float> my_vect(42, 0.0); // builds a vector with 42 floats all initialized to 0.0 

使用那些你應該能夠解決你的功課問題的線索。

+0

真棒,好吧,我會嘗試定義我的模板頭然後,生病讓你回來,也感謝關於該向量的提示,哦,我剛剛意識到我必須有2個座標爲每個向量,所以std ::向量可以是2維?所以像它擁有42次2座標,如下所示:[(0.0,0.0); (0.0,0.0)... – Jaanus 2011-03-07 17:33:07

1

回答:什麼是使用模板的時候,當我已經定義了我必須使用的數據類型?

你寫的課沒有意義。我希望能夠看到存儲的類型和(可能)作爲模板參數的大小。

template <class T, unsigned short n> 
class MyVector { 
... 
}