矩阵运算,构造函数问题

Matrix operation, constructor problem

本文关键字:构造函数 问题 运算      更新时间:2023-10-16

我想再提一个关于矩阵运算的问题…

template <typename T>
struct TMatrix
{
    typedef std::vector < std::vector <T> > Type;
};

template <typename T>
class Matrix
{
    private:
            typename TMatrix <T>::Type items;       
            const unsigned int rows_count;          
            const unsigned int columns_count;   
    public:
             template <typename U>
             //Error, see bellow please
             Matrix ( const Matrix <U> &M ): 
                  rows_count ( M.getRowsCount() ), columns_count ( M.getColumnsCount() ), items ( M.getItems()){} 
             unsigned int getRowsCount() const {return rows_count;}
             unsigned int getColumnsCount() const {return columns_count;}
             typename TMatrix <T>::Type const & getItems () const {return items;}
             typename TMatrix <T>::Type & getItems ()  {return items;}  

编译代码时,编译器停在这里:

Matrix ( const Matrix <U> &M ):  
      rows_count ( M.getRowsCount() ), columns_count ( M.getColumnsCount() ), items ( M.getItems()){}  //Error

并显示以下错误:

Error   79  error C2664: 'std::vector<_Ty>::vector(const std::allocator<_Ty> &)' : cannot convert parameter 1 from 'const std::vector<_Ty>' to 'const std::allocator<_Ty> &'

但我不知道,为什么……再次感谢您的帮助……

更新问题:

编译代码

template <class T>
template <typename U>
Matrix <T> :: Matrix ( const Matrix <U> &M )
: rows_count ( M.getRowsCount() ), columns_count ( M.getColumnsCount() ), items ( M.getItems().begin(), M.getItems().end()){}

,结果如下:

Error   132 error C2664: 'std::vector<_Ty>::vector(const std::allocator<_Ty> &)' : 
cannot convert parameter 1 from 'const std::vector<_Ty>' to 'const std::allocator<_Ty> &'
c:program filesmicrosoft visual studio 10.0vcincludexmemory    208

你的模板化构造函数Matrix<T>::Matrix<U>(const Matrix<U> &M)被设计用来构造给定Matrix<U>Matrix<T>。它通过调用初始化列表中的构造函数vector<vector<T>>(vector<vector<U>>)来实现这一点。

问题是std::vector没有提供混合类型的构造函数。

我不知道如何在初始化列表中解决这个问题。可以在构造函数的主体中进行。以下是对公共接口的更新,以允许此操作:

Matrix() : rows_count(), columns_count(), items() {}
template <typename U>
Matrix ( const Matrix <U> M ):
    rows_count ( M.getRowsCount() ), columns_count ( M.getColumnsCount() ), items ( ) {
    for(int i = 0; i < M.getItems().size(); i++) {
        items.push_back(std::vector<T>(M.getItems()[i].begin(),M.getItems()[i].end()));
    }
}

您忘记在文件的顶部添加#include <vector>,并在文件的末尾添加};。当我将这些添加到代码中时,它在我的计算机上编译得很好。