C++stl错误,因为缺少常量
C++ stl error because of missing const
我刚刚纠正了一个错误,但我不明白为什么。这是常数。正确的版本:
#include<iostream>
template <typename T>
T square(T x)
{
return x*x;
}
template <typename T>
class BoVector{
T arr[1000];
int size;
public:
BoVector():size(0){}
void push(T x) {arr[size]=x;size++;}
T get(int i) const {return arr[i];}
int getSize() const {return size;}
void print() const {for (int i=0; i< size; i++) std::cout << arr[i] << std::endl;}
};
template<typename T>
BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){
BoVector<T> ret;
for(int i=0; i<rhs1.getSize(); i++){
ret.push(rhs1.get(i) * rhs2.get(i));
}
return ret;
}
int main()
{
//std::cout << square<int>(5) << std::endl;
BoVector<int> bv;
bv.push(2);
bv.push(4);
bv.push(5);
bv.push(100);
//bv.print();
BoVector<int> bv2;
bv2=square(bv);
bv2.print();
}
我犯的错误是,在BoVector类中,我没有成员函数的常量:
T get(int i) {return arr[i];}
int getSize() {return size;}
void print() {for (int i=0; i< size; i++) std::cout << arr[i] << std::endl;}
};
使用const和&这对我来说只是个新鲜事。有人能告诉我为什么这里需要const吗?
如果在const
参数上调用operator*
中的getsize
,则必须指定此方法不会更改对象的状态。因此,有必要将该方法限定为const
方法:在const对象(具有const状态的对象(上调用该方法是安全的。
int getsize() const {…}
最好的做法是限定每一个不改变对象状态的方法即CCD_ 5和CCD_。
template<typename T>
BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){
BoVector<T> ret;
for(int i=0; i<rhs1.getSize(); i++){
这里的参数rhs1
是const,所以你只能在它上面调用const成员函数
BoVector::operator*
将const BoVector&
的rhs1
和rhs2
作为参数。因此,不能在它们上调用非const
成员函数,也就是说,在rhs1
和rhs2
上调用的所有成员函数都应该是const
。因此,如果getSize()
或get()
不是const
,您将遇到错误。
您已经定义了使用const:的运算符
BoVector<T> operator*(const BoVector<T>& rhs1, const BoVector<T>& rhs2){
相关文章:
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 通过多个头文件使用常量变量
- 在cuda线程之间共享大量常量数据
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 是默认情况下分配给char数组常量的值
- 私有类型的静态常量成员
- 类似枚举的计算常量
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我可以通过引用修改常量返回
- 如何创建长度由常量参数指定的数组
- 当一个值是非常量但用常量表达式初始化时使用constexpr
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- isdigit() 和 isalnum() 给出错误,因为输入是一个常量字符并且无法转换。其他可能查看输入是否为数字的方法?
- C++stl错误,因为缺少常量