Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回看似随机的大整数的向量大小()_C++_Vector_Operator Overloading - Fatal编程技术网

C++ 返回看似随机的大整数的向量大小()

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

我正在做家庭作业,遇到了一个奇怪的问题。当尝试使用size()函数获取2D向量的大小时,我会得到看似随机的大整数,这会阻止程序运行。我需要访问向量中元素的大小

我的头文件:

#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;
}