2012-02-24 103 views
0

我目前正在为向量类实现构造函数(我的教授说我们可以省略任何使用分配器的东西)。我用我的教授给我们的参考网站来确定函数的格式:http://www.cplusplus.com/reference/stl/vector/vector/构造向量C++

我在函数中出现了一些错误。错误的两个是:

语法错误:标识符“SIZE_TYPE”

“值”:未声明的标识符

任何想法,为什么我会收到这些错误?这是我的代码:

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

您是如何编制的代码来装点一切吗?你在windows或linux上有什么系统?你在用什么编译器?你有没有包含正确的库?这些都是必须回答的问题 – pyCthon 2012-02-24 00:29:46

+0

我在Microsoft Visual Studio下编译相同的问题。用size_t替换size_type,它编译得很好。无论如何,Size_t似乎更常用。 – Owl 2016-09-01 14:48:27

回答

1

如果您在.h文件中定义类,那么= T()是默认值。当您在.cpp或.cc文件中实现该方法时,不需要使用默认值。

size_type不在全局范围内,因此您需要使用解析运算符来给出正确的范围。它似乎是std::string::size_type。这可能只是size_t的一个typedef。我在STL容器中看到了size_type,但是我在创建自己的类时从未使用它。

而且,迪特马尔·库尔提到的,使用C++模板时,你需要template <typename T>

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,vectmy_vext,未初始化的使用length)。请注意,在C++中增加变量的惯用方式是使用预增量(是的,由于更多原因,语言实际上应该被称为“++ C”),而不仅仅是习惯用法。

+0

只是想指出:“size_type”是STL容器的许多预期类型之一。它通常只是size_t的typedef。他们的完整列表在Katelyn Sapio之前提到的链接上:http://www.cplusplus.com/reference/stl/vector/ – 2012-02-24 01:12:15