当前位置: 首页 > 知识库问答 >
问题:

“int”类型的非常量引用的初始化无效

陈胤
2023-03-14

我正在尝试用C重新创建vector类

我在函数at()中得到这个错误;

“int”类型的非常量引用的初始化无效

即使函数应该返回引用,也不能将指针作为地址返回吗?

代码如下所示:

template<typename T>
class Vector
{
public:

   explicit Vector(int initSize = 0);
   Vector(const Vector & rhs) throw (std::bad_alloc);
   ~Vector();
   const Vector & operator=(const Vector & rhs) throw (std::bad_alloc);
   void resize(int newSize);
   void reserve(unsigned int newCapacity);
   bool empty() const;
   int size() const;
   int capacity() const;
   T & operator[](int index);
   const T & operator[](int index) const;
   T & at(int index) throw (std::out_of_range);
   void push_back(const T & x) throw (std::bad_alloc);
   T pop_back();
   const T & back() const;
   typedef T * iterator;
   typedef const T * const_iterator;
   iterator insert(iterator it, const T& x) throw (std::bad_alloc);
   iterator begin();
   const_iterator begin() const;
   iterator end();
   const_iterator end() const;

private:
   int theSize;
   unsigned int theCapacity; 
   T * objects; 
};
#include "vector.hpp"
#endif /* VECTOR_HPP_ */

template<typename T>
Vector<T>::Vector(int initSize):theSize
(initSize),theCapacity(128),objects(0)
{

}

typename Vector<T>::iterator Vector<T>::begin()
{
    return objects;
}

template<typename T>
T & Vector<T>::at(int index) throw (std::out_of_range)
{
    //if (index<=theSize)
        return (begin()+index);
}

int main() 
{
        Vector<int>* vec1=new Vector<int>(4);
    cout<<vec1->at(2)<<endl;
        return 0; 
}

共有1个答案

晋承运
2023-03-14

表达式begin()索引属于指针类型;您需要添加解引用以使其成为引用:

template<typename T>
T & Vector<T>::at(int index) throw (std::out_of_range)
{
    return *(begin()+index);
}

请注意,这可能不安全,因为重新分配对象的操作会使通过at()函数获得的引用无效。

 类似资料:
  • 问题真的很简单,为什么这段代码不能工作: G++给出了以下错误: ./test.cpp:在函数“int main(int,char**)”中:./test.cpp:4:13:错误:未初始化的const“a”[-Fpermissive]const int a,b=std::tie(std::make_pair(1,2));^./test.cpp:4:42: 错误:无法将“std::pair&”类型的

  • Ivor Horton在开始的Visual C 2013中提到了C语言中的“初始化列表”: "对于const或引用类型的类成员,您无法选择如何初始化它们。唯一的方法是在构造函数中使用成员初始化器列表。构造函数主体内的赋值将不起作用。" 我的Visual Studio 2012 express没有编译初始值设定项列表,所以一开始我很困惑,然后我意识到它不受支持。 我的问题是人们如何在初始化器列表之前

  • 本文向大家介绍C++常量详解一(常量指针与常量引用的初始化),包括了C++常量详解一(常量指针与常量引用的初始化)的使用技巧和注意事项,需要的朋友参考一下 1、常量 1.1、常量的初始化: const对象一旦创建后其值就不能再改变,所以const对象必须初始化。这里我们要注意一点,像const int *p和const int &r都并不是const对象。因为const int *p只是表示不能通

  • 我希望有人能帮助我解决我在尝试使用factory_girl时收到的未初始化常量错误的问题。我知道类似的问题已经发布在堆栈溢出上,我试图在这些帖子中找到解决方案,但无济于事。 我有一个非rails项目,我正在使用rspec进行测试。我希望使用factory_girl来创建测试数据。 所以我把我的工厂定义在一个名为users.rb的文件中,在spec/工厂文件夹中。工厂如下: 终止 然后我做了一个测试

  • 初始化动画类型的对象时,会收到以下警告。 (警告添加为注释) 这是一张照片 以下是代码摘要: 这是我尝试编译后的日志猫 这里是我使用错误代码的地方 列表视图1。setOnItemClickListener(新的AdapterView.OnItemClickListener(){ 我找不到错误。 我创建了正确的文件夹和文件。在这里。 这是我得到我正在使用的动画代码的地方。 试图创建一个文件夹。收到这