C++ 返回看似随机的大整数的向量大小()
我正在做家庭作业,遇到了一个奇怪的问题。当尝试使用size()函数获取2D向量的大小时,我会得到看似随机的大整数,这会阻止程序运行。我需要访问向量中元素的大小 我的头文件:C++ 返回看似随机的大整数的向量大小(),c++,vector,operator-overloading,C++,Vector,Operator Overloading,我正在做家庭作业,遇到了一个奇怪的问题。当尝试使用size()函数获取2D向量的大小时,我会得到看似随机的大整数,这会阻止程序运行。我需要访问向量中元素的大小 我的头文件: #ifndef _MATRIX_H #define _MATRIX_H #include <iostream> #include <vector> class Matrix { private: //int dimension; std::vector&l
#ifndef _MATRIX_H
#define _MATRIX_H
#include <iostream>
#include <vector>
class Matrix {
private:
//int dimension;
std::vector< std::vector<int> > matrix;
public:
Matrix();
Matrix(std::vector< std::vector<int> >);
void print();
Matrix operator-(Matrix operand);
};
#endif
\ifndef\u矩阵
#定义矩阵
#包括
#包括
类矩阵{
私人:
//整数维;
标准向量<标准向量>矩阵;
公众:
矩阵();
矩阵(std::vector);
作废打印();
矩阵运算符-(矩阵操作数);
};
#恩迪夫
我的实现文件:
#include "Matrix.h"
#include <iostream>
#include <vector>
// Default constructor
Matrix::Matrix() {
}
// Parameterized constructor
Matrix::Matrix(std::vector< std::vector<int> >) {
}
void Matrix::print() {
std::cout << "Size of matrix in print() " << matrix.size() << std::endl;
for (int i = 0; i < matrix.size(); i++) {
for (int j = 0; j < matrix.size(); j++) {
std::cout << matrix[i][j] << " ";
}
std::cout << std::endl;
}
}
Matrix Matrix::operator-(Matrix operand) {
Matrix difference;
std::vector< std::vector<int> > diffMatrix;
diffMatrix.resize(matrix.size());
for (int i = 0; i < matrix.size(); i++ ) {
diffMatrix[i].resize(matrix.size());
}
difference.matrix = diffMatrix;
if (operand.matrix.size() == matrix.size()) {
for (int i = 0; i < operand.matrix.size(); i++) {
for (int j = 0; j < operand.matrix.size(); j++) {
difference.matrix[i][j] = matrix[i][j] - operand.matrix[i][j];
}
}
}
}
#包括“Matrix.h”
#包括
#包括
//默认构造函数
矩阵::矩阵(){
}
//参数化构造函数
矩阵::矩阵(标准::向量<标准::向量>){
}
void矩阵::print(){
不幸的是,问题在于:
Matrix Matrix::operator-(Matrix operand) {
从不返回值。这会导致未定义的行为,您看到的症状是-
返回垃圾的结果
在功能结束时,您希望:
return difference;
}
C++标准不需要编译器对此进行警告,但如果它们警告的话,仍然很好。但是,添加标志
-Wreturn type
确实会产生警告。IDK为什么这不是-Wall
的一部分,至少在这样的简单情况下是如此。矩阵的构造函数从不初始化维度矩阵::矩阵(std::vector)
将矩阵保留为空,这就是您使用的构造函数。在此代码中,您还有几个位置应该使用jj运算符-<代码>缺少了<代码>返回<代码>——你的编译器没有抱怨吗?这是固定的!我还是C++的新手,你能解释一下Wall是什么吗?-Wrar是一个编译器开关,允许“所有”警告。(实际上是一组常见的警告)。g++和clang对编译器警告使用相同的语法。有关启用警告的详细信息,请查看编译器文档。
return difference;
}