模板化C++类具有"预期的非限定 id"
Templated C++ class has an 'expected unqualified-id'
对于类作业,我们必须将 STL 向量写入模板化的 .h 文件中。我尝试运行它,除了赋值错误的重载之外,我的所有成员函数都可以工作。它位于最底部,是倒数第二个成员函数。当接到任务时,我被要求超载Vector<T>& operator=(const Vector&v)
template <class T>
class Vector{
private:
int current_size, capacity;
T* arr;
public:
Vector();
~Vector();
unsigned int size();
void grow(); //where does this belong?
void push_back(const T& elt);
void pop_back();
T& at(int pos);
T& front();
T& back();
bool empty();
void insert (const T&elt, int pos);
void erase(int pos);
Vector<T>& operator=(const Vector& v);
T& operator[](int n);
};
template <class T>
Vector<T>& Vector<T>::operator=(const Vector& v){
current_size= v.size();
capacity= v.capacity();
}
错误是"预期的非限定 id",出现错误的行是:
"Vector& Vector::operator=(const Vector& v)"{
这段代码有很多很多问题。
Zeroth,您的缩进样式使阅读代码变得非常困难。每次打开新范围时,缩进!
首先,定义成员函数:
template <class T>
typename Vector<T>::T& at(int pos)
template <class T>
Vector<T>:: T& back()
正确的语法是 return-type class-name::member-name
。所以这些应该是:
template <class T>
T& Vector<T>::at(int pos)
template <class T>
T& Vector<T>::back()
第二,delete
。 arr
是动态数组T
。只有它是动态的。在多个位置,您尝试删除单个元素:
delete arr[current_size-1];
这是一个无效的操作。
第三,对于您的具体问题,参数v
为const
:
template <class T>
Vector<T>& Vector<T>::operator=(const Vector<T>& v){
这意味着您只能调用const
限定成员函数。 size()
不符合const
资格。您必须添加:
unsigned int size() const;
^^^^^^
之后,capacity
不是成员函数,它只是一个成员:
capacity= v.capacity();
^^
在那之后,你的复制赋值运算符也需要实际复制所有元素 - 否则它不是真的......复制任何实质性的东西。
相关文章:
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 如何获取 GLFW 窗口 ID?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- Xcode 9.4.1 中的 Apple Mach-O 链接器 (id) 错误
- 错误:令牌 { '{' 之前应存在非限定 ID
- 断言"id < 0"在Qt ActiveX中失败
- C++部分概念 id:显式模板规范顺序/第一个参数的特殊状态的原因是什么?
- 如何根据两个因素组织向量:id 和数量?(C++)
- 在返回 0 之前应为非限定 ID
- Direct3D 11 - HLSL - 获取顶点索引 ID
- 编译时检查特征专用化是否具有唯一 ID
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- 一种有效的数据结构,用于按 ID 访问和查找加权随机项