C++ 错误代码 C2784 无法推断模板参数

标签 c++ c++11 matrix

我是面向对象编程和 C++ 的新手。我一直在研究矩阵类和方阵类,遇到了一些我似乎无法弄清楚的问题。我得到的错误代码是:

C2784:
'matrix<T,m,k> operator *(matrix<T,m,n> &,matrix<T,n,k> &)': could not 
deduce template argument for 'matrix<T,m,n> &' from 
'std::vector<std::vector<double,std::allocator<_Ty>>,std::allocator<std::vector<_Ty,std::allocator<_Ty>>>>'

我真的不确定为什么,因为我的代码的其他部分可以正常工作。在“product.elements = product.elements * elements;”这一行报告错误

//Source.cpp
#include"Squarematrix.h"
#include<iostream>
#include<vector>
using namespace std;
int main() {
    vector<double> a = { 1, 2,4,5,6};
    squarematrix<double,2> N;
    N.assign(a);
    cout << N << N.pow(2)<< endl;
    return(0);
}

//Matrix.h
#ifndef _Matrix_
#define _Matrix_
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
template<class T, int m, int n>
class matrix {
public:
    vector<vector<T>> elements;
    int nrow;
    int ncol;
    matrix();
    matrix(matrix<T, m, n>&);
 };
template<class T, int m, int n>
matrix<T, m, n>::matrix() {
    vector<T>temp(n, 0);
    elements.assign(m, temp);
    nrow = m;  //m=0
    ncol = n;  //n=0
}
template<class T, int m, int n>
matrix<T, m, n>::matrix(matrix<T, m, n>& a) {
    elements = a.elements;
    nrow = m;
    ncol = n;
}
template<class T, int m, int n, int k>
matrix<T, m, k> operator*(const matrix<T, m, n>& a, const matrix<T, n, k>& b) {
matrix<T, m, k> product;
for (int i = 0; i < m; i++) {
    for (int j = 0; j < k; j++) {
        for (int h = 0; h < n; h++)
            product.elements[i][j] += a.elements[i][h] * b.elements[h][j];
    }
}
return product;
}

template<class T, int m, int n>
ostream& operator<< (ostream& o, const matrix<T, m, n>& input) {
    for (int i = 0; i < m; ++i) {
    for (int j = 0; j < n; ++j)
    o << input.elements[i][j] << " ";
    o << endl;
    }
    return o;
}
#endif _Matrix_

//Squarematrix.h
#ifndef _Squarematrix_
#define _Squarematrix_

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

template<class T, int n>
class squarematrix : public matrix<T, n, n> {
public:
    squarematrix();
    squarematrix(squarematrix<T, n>&);

    squarematrix<T, n> pow(int); //calculate A^k
}; 
template<class T, int n>
squarematrix<T, n>::squarematrix(){
    vector<T>temp(n, 0);
    elements.assign(n, temp);
    nrow = n;  //n=0
    ncol = n;  //n=0
}
template<class T, int n>
squarematrix<T, n>::squarematrix(squarematrix<T, n>& a){
    elements = a.elements;
    nrow = n;
    ncol = n;
}
template<class T, int n>
squarematrix<T, n> squarematrix<T, n>::pow(int k){
    squarematrix<T, n> product;
    product.elements = elements;
    for (int power = 2; power <= k; power++) {
    product.elements = product.elements * elements;  
    }
    return product;
}
#endif _Squarematrix_

最佳答案

您不需要 nrowncol - 它们是模板参数并且在编译时已知。

但这不是问题 - 你乘以 std::vector 你应该乘以 squarematrix:

template<class T, int n>
squarematrix<T, n> squarematrix<T, n>::pow(int k){
    squarematrix<T, n> product = unit_matrix<T, n>();
    for (int power = 1; power <= k; power++) {
        product = product * *this;
    }
    return product;
}

我在其中使用了创建单位矩阵的虚构函数。
编写该函数留作练习。

关于C++ 错误代码 C2784 无法推断模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36452793/

相关文章:

c - 从 C 中的函数返回后变量值发生变化

android - Android 上的二维四边形 : Translation with OpenGL ES 2. 0

区分枚举类和常规枚举的 C++11 类型特征

c++ - 除了方便之外,lambdas 还有其他优势吗?

c++ - NetBeans 6.7.1、Linux、C++ 中的 "Unable to resolve..."

C++ vector 指针/引用问题

c++ - 如何使用 decltype 访问依赖类型?

arrays - 字符可以用作索引吗?

c++ - 返回 vector 的第一个元素被(重新)设置为 0

c++ - 接口(interface)方法的实现