В общем я попытался написать программу на с++, у меня не получилось((.
Проблема вот в чем:
Есть такая функция(я думаю имена классов сами за себя говорят):
template <class T>
Matrix<T> operator*(T k, Matrix<T> m) {
std::vector<innerVectorType> resultVector;
for(unsigned int i = 0; i < m.getHeight; i++) {
resultVector.push_back(std::vector<T>());
for(unsigned int j = 0; j < m.getWidth; j++) {
resultVector.at(i).push_back(k*mVector[i][j]);
}
}
return new Matrix<T>(resultVector); //один из конструкторов матрицы по вектру
};
Теперь мой main():
int _tmain(int argc, _TCHAR* argv[])
{
Matrix<int> m1 = Matrix<int>();
m1.printMatrix();
Matrix<int> m2 = Matrix<int>();
m2.printMatrix();
Matrix<int> m3 = m1 + m2;
return EXIT_SUCCESS;
}
И надо же такому случитсяЖ вылетает ошибка!!!!! Вот такая:
error LNK2019: unresolved external symbol "class Matrix<int> __cdecl operator+(class Matrix<int>,class Matrix<int>)" (??H@YA?AV?$Matrix@H@@V0@0@Z) referenced in function _wmain
Поскольку я новичек в программировании, я сразу испугался и решил делегировать решение проблемы на вас, дорогие мои! Помогите!
Примечание:
прошу прощения, я не тот участок кода выложил, операция + определена у меня для матриц,я перепутал и выложил не то, ниже выкладываю весь код класса, функция main() такая как в вопросе остается:
#pragma once
#include <iostream>
#include <vector>
#define innerVectorType std::vector<T>
template <class T>
class Matrix
{
public:
Matrix();
Matrix(std::vector<innerVectorType> vect);
void printMatrix();
std::vector<innerVectorType> getMatrixVector();
int getHeight();
int getWidth();
friend Matrix<T> operator*(Matrix<T> m1, Matrix<T> m2);
friend Matrix<T> operator*(const T k, const Matrix<T>& m);
friend Matrix<T> operator*(const Matrix<T>& m, const T k);
friend Matrix<T> operator+(Matrix<T> m1, Matrix<T> m2);
private:
void keyboardMatrixInitialization();
void fromFileMatrixInitialization();
private:
std::vector<innerVectorType> matrix;
unsigned int myHeight;
unsigned int myWidth;
};
траляля, тут другие функции, не вызывающие ошибок иии...
template <class T>
Matrix<T> operator*(const T k, const Matrix<T>& m) {
std::vector<innerVectorType> resultVector;
for(unsigned int i = 0; i < m.getHeight; i++) {
resultVector.push_back(std::vector<T>());
for(unsigned int j = 0; j < m.getWidth; j++) {
resultVector.at(i).push_back(k*mVector[i][j]);
}
}
return Matrix<T>(resultVector);
}
template <class T>
Matrix<T> operator*(const Matrix<T>& m, const T k) {
std::vector<innerVectorType> resultVector;
for(unsigned int i = 0; i < m.getHeight; i++) {
resultVector.push_back(std::vector<T>());
for(unsigned int j = 0; j < m.getWidth; j++) {
resultVector.at(i).push_back(k*mVector[i][j]);
}
}
return Matrix<T>(resultVector);
}
template <class T>
Matrix<T> operator*(Matrix<T> m1, Matrix<T> m2) {
//TODO
}
template <class T>
Matrix<T> operator+(Matrix<T> m1, Matrix<T> m2) {
if((m1.getHeight() != m2.getHeight()) || (m1.getWidth != m2.getWidth())) {
throw std::invalid_argument("Matrixs' sizes are not equal.");
}
std::vector<innerVectorType> m1Vector = m1.getMatrixVector();
std::vector<innerVectorType> m2Vector = m2.getMatrixVector();
std::vector<innerVectorType> resultVector;
int height = m1.getHeight();
int width = m2.getWidth();
for(unsigned int i = 0; i < height; i++) {
resultVector.push_back(std::vector<T>());
for(unsigned int j = 0; j < width; j++) {
resultVector.at(i).push_back(m1Vector[i][j]+m2Vector[i][j]);
}
}
return Matrix<T>(resultVector);
}