设计.h和.cpp文件C ++:错误

时间:2014-11-02 16:45:55

标签: c++

我正在尝试制作一个矩阵程序,它使用整数向量的向量来生成n * m整数矩阵。但是我在这方面遇到了麻烦,因为我对C ++还不熟悉。我已经开始实现我的程序,但是我得到了一大堆错误,我无法弄清楚为什么。此外,这是我第一次使用.h和矢量,所以请温柔:)。

Matrix.h

#ifndef MATRIX_H
#define MATRIX_H 

#include<vector>
using namespace std;

class Matrix{
    public:
        Matrix( );
        Matrix(int r, int c);
        void setRow(vector<int> row, int r);
        void setColumn(vector<int> col, int c);
        int getRow();
        int getCol();
        void output();
        double average();
    private:
        int row, column;
        vector< vector<int> > matrix;
};

#endif

Matrix.cpp

#include "Matrix.h"
#include<iostream>
#include<vector>
using namespace std;

int main(){
    int row,column;
    cout << "Enter number of rows: ";
    cin >> row;
    cout << "Enter number of column: ";
    cin >> column;
    Matrix matrix(row,column);
    matrix.output();

}

Matrix::Matrix():row(3), column(3){
    matrix = vector<vector<int> >(row);
    for (int i = 0; i < row; i++){
        matrix[i] = vector<int>(column);
    }
}

Matrix::Matrix(int r, int c): row(r), column(c){
    matrix = vector<vector<int> >(r);
    for (int i = 0; i < r; i++){
        matrix[i] = vector<int>(c);
    }
}

void Matrix::setRow(vector<int> row, int r){
    if (r <= row){
        if (row.size <= column){
            for (int i = 0; i < row.size; i++){
                matrix[r][i] = row[i];
            }
        }
    }
}

void Matrix::setColumn(vector<int> col, int c){
    if (c <= column){
        if (col.size <= row){
            for (int i = 0; i < col.size; i++){
                matrix[i][c] = col[i];
            }
        }
    }
}

void Matrix::output(){
    for (int i = 0; i < row; i++){
        for (int j = 0; j < column; j++){
            cout << matrix[i][j];
        }
        cout<< endl;
    }
}

好的,所以上面是我之前代码的固定版本,但现在我收到了这个错误:

错误:

Matrix.cpp: In member function ‘void Matrix::setRow(std::vector<int, std::allocator<int> >, int)’:
Matrix.cpp:32: error: no match for ‘operator<=’ in ‘r <= row’
Matrix.cpp:33: error: invalid use of member (did you forget the ‘&’ ?)
Matrix.cpp:34: error: invalid use of member (did you forget the ‘&’ ?)
Matrix.cpp: In member function ‘void Matrix::setColumn(std::vector<int, std::allocator<int> >, int)’:
Matrix.cpp:43: error: invalid use of member (did you forget the ‘&’ ?)
Matrix.cpp:44: error: invalid use of member (did you forget the ‘&’ ?)

3 个答案:

答案 0 :(得分:1)

定义Matrix时,您将其定义为空,因此class Matrix{评估为class{,以及类本身内Matrix的所有出现。

这是因为预编译器在编译代码之前运行#if块,并将找到的#define s的所有出现替换为给定的字符串(在您的情况下为空字符串)。

答案 1 :(得分:1)

请先更改标题gaurds: -

#ifndef Matrix
#define Matrix

它类似于类名。使它像

#ifndef __MATRIX_
#define __MATRIX_

答案 2 :(得分:1)

这里有一些问题:

  1. 您将include guard和具有相同名称的类命名为。因此,预处理器将通过用空字符串替换Matrix来完全搞乱。替换:

    #ifndef Matrix
    #define Matrix
    

    使用:

    #ifndef Matrix_h
    #define Matrix_h
    

    或其他任何东西。尾随_H和所有CAPS是避免命名冲突的常见方法。例如,您可以使用:

    #ifndef MATRIX_H
    #define MATRIX_H
    
  2. 您忘记导入Vector类。在Matrix.h

    的顶部添加
    #include <vector>
    
  3. 您无法使用matrix(0,0,0,0,0,0)初始化矢量矢量。只是省略那一部分。 int中的vector元素已默认为零。

  4. 您没有提供接受整数和向量的构造函数,该构造函数将在Matrix.cpp的第20行使用:

    Matrix::Matrix(int r, int c): row(r), column(c){
        matrix(r, vector<int>(c));
        // ....
    }
    

    修复如下:

    Matrix::Matrix(int r, int c): row(r), column(c){
        matrix = vector<vector<int> >(r);
        for (int i = 0; i < r; i++){
            matrix[i] = vector<int>(c);
        }
    }