矩阵运算,构造函数问题
Matrix operation, constructor problem
我想再提一个关于矩阵运算的问题…
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>
,并在文件的末尾添加};
。当我将这些添加到代码中时,它在我的计算机上编译得很好。
相关文章:
- 变分模板递归构造函数问题
- C++重载构造函数问题
- 迷宫构造函数问题 [线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)]
- 构造函数问题<无法读取内存>
- 构造函数问题
- 另一个类中的类的构造函数问题
- 类构造函数问题
- 遇到构造函数问题
- C++ STM32用户定义的类构造函数问题
- 模板嵌套类的构造函数问题(复制 ctor 似乎覆盖了其他 ctor)
- 布尔构造函数问题的动态数组
- C++ 构造函数问题 // 继承的类
- C++:构造函数问题
- 类没有复制构造函数问题
- C++重载构造函数问题
- C++构造函数问题
- 在我的程序中"无符号"之前的预期主表达式(析构函数和构造函数问题)
- 复制构造函数问题C++:"0xC0000005: Access violation writing location 0x00000000."
- c++成员函数和构造函数问题
- c++派生类构造函数问题