gpt4 book ai didi

c++ - 从类型 'int&' 的临时类型 'int*' 的非常量引用的无效初始化

转载 作者:行者123 更新时间:2023-11-30 04:14:36 25 4
gpt4 key购买 nike

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

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

从类型为“int*”的临时类型中对类型为“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;
}

最佳答案

表达式begin()+index是指针类型;您需要添加取消引用以使其成为引用:

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

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

关于c++ - 从类型 'int&' 的临时类型 'int*' 的非常量引用的无效初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com