我目前正在为vector类实现构造函数(我的教授说我们可以省略任何使用分配器的东西)。我使用了教授给我们的参考网站来确定函数的格式:http://www.cplusplus.com/reference/stl/vector/vector/
我的功能出现了一些错误。其中两个错误是:
语法错误:标识符'size_type'
'value':未声明的标识符
知道为什么我会收到这些错误吗?这是我的代码:
explicit vector (size_type n, const T& value= T())
{
my_vect=new int x[2*n];
for(int i=0; i<n; i++)
{
vect[i]=value;
length++;
}
}
答案 0 :(得分:1)
这段代码缺少相当多的上下文。这使得很难分辨出问题所在。从错误消息中,您似乎至少没有定义size_type
。它看起来好像T
没有被定义,这让我觉得你试图定义构造函数,但这看起来像这样:
template <typename T>
vector<T>::vector(size_type n, T const& value):
my_vect(new T[2u * n]),
length(n)
{
for (size_type i(0); i != n; ++i) {
my_vect[i] = value;
}
// or: std::fill_n(my_vect, n, value);
}
这也解决了一些错误(使用int
与T
,vect
与my_vext
,未初始化使用length
)。请注意,在C ++中增加变量的惯用方法是使用preincrement(是的,该语言实际上应该被称为“++ C”,原因不仅仅是惯用法)。
答案 1 :(得分:1)
如果您在.h文件中定义类,则= T()
是默认值。在.cpp或.cc文件中实现该方法时,将省略默认值。
size_type似乎不在全局范围内,因此您需要使用解析运算符来为其提供正确的范围。它似乎是std::string::size_type
。这可能只是size_t
的typedef。我在STL容器中看到size_type,但在创建自己的类时我从未使用它。
另外,正如DietmarKühl所说,在使用C ++模板时,你需要使用template <typename T>
来装饰所有内容