【问题标题】:construct vector C++构造向量 C++
【发布时间】:2012-03-14 11:34:20
【问题描述】:

我目前正在为向量类实现构造函数(我的教授说我们可以省略任何使用分配器的东西)。我使用了教授给我们的参考网站来确定函数的格式: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++;
    }
}

【问题讨论】:

  • 你是如何编译这段代码的?你在windows或linux上是什么系统?你用的是什么编译器?您是否包含正确的库?这些都是必须回答的问题
  • 我在 Microsoft Visual Studio 下编译时遇到了同样的问题。用 size_t 替换 size_type,它编译得很好。无论如何,size_t 似乎更常用。

标签: c++ vector constructor size-type


【解决方案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);
}

这还修复了一些错误(intT 的使用、vectmy_vextlength 的未初始化使用)。请注意,在 C++ 中增加变量的惯用方法是使用预增量(是的,该语言实际上应该称为“++C”,原因不仅仅是惯用用法)。

【讨论】:

  • 只是想指出:“size_type”是 STL 容器的许多预期类型之一。它通常只是 size_t 的 typedef。它们的完整列表在 Katelyn Sapio 之前提到的链接上:cplusplus.com/reference/stl/vector
【解决方案2】:

如果您在 .h 文件中定义您的类,则 = T() 是默认值。当您在 .cpp 或 .cc 文件中实现该方法时,您会忽略默认值。

size_type 似乎不在全局范围内,因此您需要使用解析运算符为其提供正确的范围。它似乎是std::string::size_type。这可能只是size_t 的类型定义。我在 STL 容器中看到 size_type,但我在创建自己的类时从未使用过它。

另外,正如 Dietmar Kühl 提到的,在使用 C++ 模板时,您需要使用 template &lt;typename T&gt; 来装饰所有内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2011-03-27
    • 2016-04-20
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多