我正在创建一个通用数据结构,我想返回一个包含我结构中某些对象的向量。
我试过
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 ++禁止声明'vector',没有类型
错误:预期';'在'&lt;'之前令牌
答案 0 :(得分: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;
}
答案 1 :(得分:4)
它是std::vector
,而不仅仅是vector
。除此之外,代码段中未定义data
。但总的来说,这是返回向量的方法。
答案 2 :(得分:2)
作为@etarion完美答案的补充,假设data
类型为T*
,最常用的方法是执行操作:
template<class T>
std::vector<T> DataStructure<T>::getItems(int count)
{
return std::vector<T>(data, data + count);
}
答案 3 :(得分: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?
};