矩阵运算、构造函数问题
我想提出另一个关于矩阵运算的问题...
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 files\microsoft visual studio 10.0\vc\include\xmemory 208
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的模板化构造函数
Matrix::Matrix(const Matrix &M)
旨在根据给定的构造一个
。它通过调用初始化列表中的构造函数Matrix
>矩阵vector>(vector>)
来实现此目的。问题是 std::vector 不提供混合类型构造函数。
我不知道如何在初始化列表中解决这个问题。您可以在构造函数的主体中执行此操作。以下是对公共界面的更新,以实现此目的:
Your templated constructor
Matrix<T>::Matrix<U>(const Matrix<U> &M)
is designed to construct aMatrix<T>
given aMatrix<U>
. It does this by invoking the constructorvector<vector<T>>(vector<vector<U>>)
in the initializer list.The problem is that
std::vector
does not provide a mixed-type constructor.I don't know how to solve this in the initializer list. You might do it in the body of the constructor. Here are updates to your public interface to allow this:
您忘记在顶部添加
#include
并在文件末尾添加};
。当我将这些添加到代码中时,它在我的计算机上编译得很好。You forgot to
#include <vector>
at the top and a};
at the end of the file. When I add these to the code, it compiles just fine on my computer.