Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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++_Templates_Class Template - Fatal编程技术网

C++ 通过常量引用传递参数的矩阵模板类

C++ 通过常量引用传递参数的矩阵模板类,c++,templates,class-template,C++,Templates,Class Template,正在尝试为矩阵对象编写模板类。 获取编译错误: c:\ProgramFiles(x86)\microsoft visual studio 11.0\vc\include\xmemory0(606):错误C2558:类“矩阵”:没有可用的复制构造函数或复制构造函数声明为“显式” 1> 带1>[1>T=float 1>] 1> c:\ProgramFiles(x86)\microsoft visual studio 11.0\vc\include\xmemory0(605):编译类模板成员函数“vo

正在尝试为矩阵对象编写模板类。 获取编译错误:

c:\ProgramFiles(x86)\microsoft visual studio 11.0\vc\include\xmemory0(606):错误C2558:类“矩阵”:没有可用的复制构造函数或复制构造函数声明为“显式” 1> 带1>[1>T=float 1>] 1> c:\ProgramFiles(x86)\microsoft visual studio 11.0\vc\include\xmemory0(605):编译类模板成员函数“void std::allocator::construct(_Ty*,const_Ty&)”1>时
1>[1>\u Ty=Matrix 1>]1> c:\ProgramFiles(x86)\microsoft visual studio 11.0\vc\include\xmemory0(751):参见函数模板实例化“void std::allocator::construct(_Ty*,const _Ty&)”的参考 正在用1>[1>
_Ty=Matrix 1>]1>c:\program files(x86)\microsoft visual studio 11.0\vc\include\type\u traits(743):请参阅 对类模板实例化“std::allocator”的引用 用1>[1>
_Ty=Matrix 1>]1>c:\program files(x86)\microsoft visual studio 11.0\vc\include\vector(655):请参阅 对类模板实例化“std::is_empty”的引用正在 用1>[1>
_Ty=std::allocator>1>]1>e:\projects\work\nns\fifteensteptut\fifteensteps\fifteensteps\source.cpp(35) :请参阅类模板实例化“std::vector”的参考 正在用1>[1>
_Ty=矩阵1>]1>1>生成失败。1>

ClCompile:1>Source.cpp 1> e:\projects\work\nns\fifteensteptut\fifteensteps\fifteensteps\matrix.h(80): 错误C2664:“矩阵::矩阵(矩阵&”):无法转换 参数1从“矩阵(uu cdecl*)(void)”到“矩阵和”1>
带1>[1>T=float 1>]1>
e:\projects\work\nns\fifteensteptut\fifteensteps\fifteensteps\matrix.h(74) :编译类模板成员函数“矩阵”时 矩阵::点(常数矩阵&)'1>与1>[1>
T=float 1>]1>
e:\projects\work\nns\fifteensteptut\fifteensteps\fifteensteps\source.cpp(62) :参见函数模板实例化“矩阵”参考 矩阵::点(常数矩阵&)'正在编译1>和1> [1>T=float 1>]1>
e:\projects\work\nns\fifteensteptut\fifteensteps\fifteensteps\source.cpp(38) :请参阅正在使用的类模板实例化“矩阵”的参考 用1>[1>T=float 1>编译1>
] 1> e:\projects\work\nns\fifteensteptut\fifteensteps\fifteensteps\matrix.h(84): 错误C2664:“矩阵::矩阵(矩阵&”):无法转换 参数1从“矩阵(uu cdecl*)(void)”到“矩阵和”1>
使用1>[1>T=float 1>]1>1>构建 失败了

“矩阵h”

#包括
#包括
模板
类矩阵{
私人:
std::矢量数据;
int行;
int cols;
公众:
矩阵();
矩阵(std::vector,int行,int列);
矩阵(矩阵&);//用这个改变
//矩阵(const Matrix&);//需要取消注释以测试第三个错误
作废打印();
矩阵转置();
矩阵点(常数矩阵&);//错误2
//矩阵点(常数矩阵&);//愚蠢的想法?
//矩阵点(常数矩阵&);//错误1
};
模板
矩阵::矩阵(){
data.clear();
行=0;
cols=0;
}
模板
矩阵::矩阵(std::向量元素,int numRows,int numCols){
行=numRows;
cols=numCols;
data.clear();
for(无符号整数i=0;istd::cout显示的代码有两个问题

1) 复制构造函数错误:

Matrix(Matrix<T>&);
头文件中的实际声明也需要更改

2) 第二个问题是:

Matrix();
收益矩阵;
这应该简单地更改为:

Matrix<T> matrix;
return matrix;
矩阵;
收益矩阵;
或者干脆:

return Matrix<T>();
返回矩阵();
这在所示代码中的两个位置发生


上述两个问题解决后,所显示的代码将使用gcc 8为我编译。

所显示的代码无法满足a的要求,正如stackoverflow.com中所解释的那样,因此可能完全无法回答。@SamVarshavchik那人呢?我现在没有可访问的编译器,但最突出的是您需要重新编译n
Matrix
在多个地方;这需要一个复制方法。尝试返回一个
const Matrix
@Aganju好吧,我已经实现了复制构造函数,但是我尝试了这个建议。对于我尝试过的一些不同想法,结果没有什么不同。我认为根本不需要复制构造函数。唯一复杂的
Matrix
成员是一名
std::vector
,而
std::vector
是五项投诉规则。
Matrix
应该能够观察到被钉住的人!
Matrix(Matrix<T>&);
Matrix(const Matrix<T>&);
Matrix<T> matrix();
return matrix;
Matrix<T> matrix;
return matrix;
return Matrix<T>();