因此,我有一个richMatrix模板类,该类对矩阵执行一些基本操作。但是,尝试调用main.cpp中的函数时出现错误。我不断得到:参数1从'richMatrix *'到'int **'的未知转换。
确切的错误消息如下:
C:/Users/annan/Desktop/prog/main.cpp: In function 'int main()':
C:/Users/annan/Desktop/prog/main.cpp:19:36: error: no matching function for call to 'richMatrix<int>::multiplyMatrix(richMatrix<int>*&, richMatrix<int>*&, int&)'
eh->multiplyMatrix(meme, lol, s);
In file included from C:/Users/annan/Desktop/prog/main.cpp:2:0:
C:/Users/annan/Desktop/prog/richMatrix.cpp:21:5: note: candidate: T** richMatrix<T>::multiplyMatrix(T**, T**, int) [with T = int]
T** richMatrix<T>::multiplyMatrix(T** mat1, T** mat2, int size)
C:/Users/annan/Desktop/prog/richMatrix.cpp:21:5: note: no known conversion for argument 1 from 'richMatrix<int>*' to 'int**'
mingw32-make.exe: *** [Debug/main.cpp.o] Error 1
prog.mk:105: recipe for target 'Debug/main.cpp.o' failed
====1 errors, 23 warnings====
关于我的main.cpp,我不确定如何从richMatrix类中调用函数,因此我的main可能意义不大。我还是编码新手。据我所知,我的createNewMatrix函数可以正常工作,但是我对乘法和除法函数的调用却出错了。
据我了解,模板应该自动将其模板类型转换为已传递的变量类型,例如int,char,string等。
如果您能启发我有关我做错了什么,并且如果可能的话,请给我一些指示,以避免将来出现这种情况,我将不胜感激。
先谢谢了。
main.cpp
#include "richMatrix.h"
#include "richMatrix.cpp"
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
int main() {
int s = 5;
richMatrix<int> *meme;
richMatrix<int> *lol;
richMatrix<int> *eh;
meme->createNewMatrix(s);
lol->createNewMatrix(s);
eh->createNewMatrix(s);
eh->multiplyMatrix(meme, lol, s);
eh->divideMatrix(meme, lol, s);
};
richMatrix.h
#ifndef RICHMATRIX_H
#define RICHMATRIX_H
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
template <class T> class richMatrix {
public:
T** createNewMatrix(int size);
T** multiplyMatrix(T** mat1, T** mat2, int size);
T** divideMatrix(T** mat1,T** mat2, int size);
};
#endif
richMatrix.cpp
#include "richMatrix.h"
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
template <class T>
T** richMatrix<T>::createNewMatrix(int size) {
T** matrix;
int s;
s = size;
matrix = new T*[s];
for(int i = 0; i < s; i++) {
matrix[i] = new T[s];
}
return matrix;
}
template <class T>
T** richMatrix<T>::multiplyMatrix(T** mat1, T** mat2, int size) {
int s = size;
T** newMatrix;
newMatrix = new T*[s];
for(int a = 0; a < s; a++) {
newMatrix[a] = new T[s];
}
for(int i = 0; i < s; i++) {
for(int j = 0; j < s; j++) {
newMatrix[i][j] = mat1[i][j] * mat2[i][j];
}
}
return newMatrix;
}
template <class T>
T** richMatrix<T>::divideMatrix(T** mat1,T** mat2, int size) {
int s = size;
T** newMatrix;
newMatrix = new T*[s];
for(int a = 0; a < s; a++) {
newMatrix[a] = new T[s];
}
for(int i = 0; i < s; i++) {
for(int j = 0; j < s; j++) {
newMatrix[i][j] = mat1[i][j] / mat2[i][j];
}
}
return newMatrix;
}
答案 0 :(得分:0)
我相信您的问题在于函数的类型声明和/或传递给函数的内容。
对于下面的multipleMatrix函数,参数的类型为T **,在主函数中创建时为int **。
template <class T> class richMatrix {
public:
T** createNewMatrix(int size);
T** multiplyMatrix(T** mat1, T** mat2, int size);
T** divideMatrix(T** mat1,T** mat2, int size);
};
但是在main.cc中,您正在传递函数,您正在传递richMatrix *而不是int **
int main() {
int s = 5;
richMatrix<int> *meme;
richMatrix<int> *lol;
richMatrix<int> *eh;
meme->createNewMatrix(s);
lol->createNewMatrix(s);
eh->createNewMatrix(s);
eh->multiplyMatrix(meme, lol, s);//right here
eh->divideMatrix(meme, lol, s);
};
您应该将传入multipleMatrix函数的对象更改为T **或更改该函数接受的参数以采用richMatrix *
答案 1 :(得分:0)
使用richMatrix<int> *meme;
时,您的multiplyMatrix()
函数变为:
int** multiplyMatrix(int** mat1,int** mat2, int size);
您会看到mat1
和mat2
类型是richMatrix<int> *
,而不是您在函数声明中期望的int **
类型。
和矩阵应通过以下方式创建:
auto meme = new richMatrix<int>();
//or in C++14 this way:
auto meme = std::make_unique<richMatrix<int>>();
因为richMatrix<int> *meme;
仅声明一个没有分配的指针,所以在成功编译后首先调用
meme->createNewMatrix(s);
将导致崩溃。