Вопрос по С++

интернет Компьютеры программирование программы С++

В общем я попытался написать программу на с++, у меня не получилось((.

Проблема вот в чем:
Есть такая функция(я думаю имена классов сами за себя говорят):

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);
}
Ответы:
m1 + m2 - оператор '+' неопределен для матриц .. возможно вы хотите использовать опреденный выше опретор '*' ?


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.