2011-01-26 48 views
4

我正在創建一個通用的數據結構,我想返回一個包含我的結構中的一些對象的向量。我如何返回一個向量<T>從函數在c + +

我試圖

template<class T> 
vector<T> DataStructure<T>::getItems(int count) 
{ 
    vector<T> items; 
    for(int i = 0; i < count; i++) 
     items.push_back(data[i]);  
    return items; 
} 

但是,編譯說

錯誤:ISO C++禁止 '向量' 的聲明無類型

錯誤:預期 ';' '<'令牌之前

回答

8

vector未定義。

您需要#include <vector>並使用std::vector或將using namespace std;放入您的函數或全局範圍(應避免後面的建議)來指定其名稱空間。


#include <vector> 

template<class T> 
std::vector<T> DataStructure<T>::getItems(int count) 
{ 
    std::vector<T> items; 
    for(int i = 0; i < count; i++) 
     items.push_back(data[i]);  
    return items; 
} 
+2

沒有,永遠,建議`用namespace`指令請,它帶來了更多的災難比它的價值:/ – 2011-01-27 07:13:42

4

std::vector,不只是vector。除此之外,data未在代碼片段中定義。但總的來說,這是返回矢量的方式。

2

作爲補充@etarion完美的答案,來執行你的操作是最地道的方式,假設dataT*類型:

template<class T> 
std::vector<T> DataStructure<T>::getItems(int count) 
{ 
    return std::vector<T>(data, data + count); 
} 
0

由於getItems'的定義必須是可通過頭反正它是一個類模板的方法,這是最簡單的類定義中定義它:

template<class T> 
struct DataStructure { 
    std::vector<T> getItems(int count) const { 
    assert(0 <= count && count <= data.size()); // don't forget to check count 

    // if you must use op[] with data: 
    // std::vector<T> items; 
    // for(int i = 0; i < count; i++) 
    // items.push_back(data[i]);  
    // return items; 

    // if data is a container (using random-access iterators here): 
    return std::vector<T>(data.begin(), data.begin() + count); 

    // if data is an array: 
    // return std::vector<T>(data, data + count); 
    } 

    std::vector<T> data; // or is data something else? 
};