Wenn ich versuche, die folgende Codierung zu kompilieren, ich habe einen Fehler sagenTemplate Matrix Skalarmultiplikation C++
Fehler 1 Fehler LNK2019: nicht aufgelöstes externes Symbol „Klasse Matrix __cdecl operator * (int const &, Klasse Matrix &) "(?? D @ YA? AV? $ Matrix @ H $ 02 $ 01 @@ ABHAAV0 @@ Z) referenziert in Funktion _main C: \ Benutzer \ PC \ Dokumente \ Visual Studio 2013 \ Projekte \ Homework4 \ Homework4 \ main.obj Homework4
Dieser Fehler ist von der Skalarmultiplikation auf Matrix aufgetreten und ich weiß nicht, wie man es repariert. Kann mir jemand dazu einen Rat geben?
//Matrix.h
#pragma once
#include <iostream>
#include <vector>
using namespace std;
template<class T, int m, int n>
class Matrix
{
vector<vector<T>> elements;
int nrow;
int ncol;
public:
Matrix();
~Matrix();
void print();
vector<T> row(int);
vector<T> col(int);
friend Matrix<T, m, n> operator+<>(const Matrix<T, m, n>&, const Matrix<T, m, n>&);
friend Matrix<T, m, n> operator-<>(const Matrix<T, m, n>&, const Matrix<T, m, n>&);
friend Matrix<T, m, n> operator*(const T&, Matrix<T, m, n>&);
};
template<class T, int m, int n>
Matrix<T, m, n>::Matrix() : nrow(m), ncol(n)
{
for (int i = 0; i < nrow; i++){
vector<T> row(ncol, i);
elements.push_back(row);
}
}
template<class T,int m,int n>
vector<T> Matrix<T, m, n>::row(int i)
{
return elements[i];
}
template<class T, int m, int n>
vector<T> Matrix<T, m, n>::col(int j)
{
vector<T> col;
for (int i = 0; i < ncol; i++)
{
col.push_back(elements[i][j]);
}
return col;
}
template<class T, int m, int n>
Matrix<T, m, n>::~Matrix(){}
template<class T, int m, int n>
void Matrix<T, m, n>::print()
{
for (int i = 0; i < nrow; i++){
for (int j = 0; j < ncol; j++)
{
cout << elements[i][j] << " ";
}
cout << endl;
}
}
template<class T, int m, int n>
Matrix<T, m, n> operator+(const Matrix<T, m, n>& m1, const Matrix<T, m, n>& m2){
Matrix<T, m, n> m3;
int nrow = m1.nrow;
int ncol = m1.ncol;
for (int i = 0; i < nrow; ++i){
for (int j = 0; j < ncol; ++j){
m3.elements[i][j] = m1.elements[i][j] + m2.elements[i][j];
}
}
return m3;
}
template<class T, int m, int n>
Matrix<T, m, n> operator-(const Matrix<T, m, n>& m1, const Matrix<T, m, n>& m2){
Matrix<T, m, n> m3;
int nrow = m1.nrow;
int ncol = m1.ncol;
for (int i = 0; i < nrow; ++i){
for (int j = 0; j < ncol; ++j){
m3.elements[i][j] = m1.elements[i][j] - m2.elements[i][j];
}
}
return m3;
}
template<class T, int m, int n>
Matrix<T, m, n> operator*(const T& c, const Matrix<T, m, n>& m1){
int nrow = m1.nrow;
int ncol = m1.ncol;
Matrix<T, m, n> m2;
for (int i = 0; i < nrow; ++i){
for (int j = 0; j < ncol; ++j){
m2.elements[i][j] = c*m1.elements[i][j];
}
}
return m2;
}
//main.cpp
#include "Matrix.h"
using namespace std;
int main()
{
Matrix<int, 3, 2> a;
Matrix<int, 3, 2> b;
Matrix<int, 3, 2> c;
c = 2*b;
c.print();
}
Ich denke, der Fehler von der Friend-Funktion kommt (Betrieb *) im Körper der Klasse, aber ich weiß nicht, wie es zu beheben ...
Vielen Dank für die Antwort. Leider habe ich getan, was du mir gesagt hast und es gibt mir immer noch einen Fehler. Ich entfernte die "const" von "Const T &" auch hinzugefügt <>. Außerdem habe ich die oberen vier Zeilen hinzugefügt. Kannst du mir einen Rat geben? – SungwonAhn
Welchen Fehler zeigt es? – xinaiz
Entschuldigung. Es funktioniert jetzt ^^ Vielen Dank !!!! – SungwonAhn