我正在练习运算符重载,我的目标是枚举我自己编写的向量类的所有值。
在执行此操作时,我遇到了段错误(不是大问题),并开始削减我的代码以查找其起源。遇到一些困难之后,我到了一个我不明白怎么回事的地步。
当尝试运行for循环以遍历矢量对象中的数据时,我发现如果我使用设置为10的变量s
,则会遇到段错误。如果我使用整数常量10 ,它可以工作。
这对我来说意义不大,但是我又在处理不熟悉的概念。任何帮助表示赞赏!
这是MCVE:
使用g++ Q1.cpp vector.h -o Q1
演示类别(Q1.cpp):
#include <iostream>
#include "vector.h"
#define INFO(x) std::cout << "[INFO]: " << x << std::endl;
int main(void) {
// 1- Test the default constructor
INFO(" ---------- Vector 1 ----------");
vector v1;
INFO(v1);
return 0;
}
向量类(vector.h):
#include <iostream>
#include <string>
class vector {
public:
float size;
float* data;
vector() : vector(0) {}
vector(int s){
size = s;
data = new float[size]();
}
};
std::ostream& operator<<(std::ostream& stream, const vector& obj){
stream << "vector: size(" << obj.size << ")" << "\n";
int s = 10;
for(int i = 0; i < s; ++i){ // problem occurs here, replace s with '10' and it works.
stream << i;
//stream << "data[" << i << "] = " << obj.data[i];
}
}
答案 0 :(得分:2)
您的重载函数需要返回stream
。
此外,请勿将size_t
用作类成员名称。完全令人困惑。
删除data
时,还应该删除vector
数组。现在泄漏了。