Форум программистов, компьютерный форум CyberForum.ru

Ошибка при перегрузке оператора, не знаю как исправить - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Нужно про компилировать и узнать выход http://www.cyberforum.ru/cpp-beginners/thread719752.html
#include <iostream> #include <cstdlib> #include "stdafx.h" using namespace std; int compare(const void *a,const void *b){ return ( *(double*)a - *(double*)b );
C++ Ввести строку символов. Определить длину введенной строки L, и если длина L кратна 3, то удаляются все символы, стоящие на местах с номером кратным 3 Помогите написать программу.Ввести строку символов. Определить длину введенной строки L, и если длина L кратна 3, то удаляются все символы, стоящие на местах с номером кратным 3. Спасибо! http://www.cyberforum.ru/cpp-beginners/thread719740.html
codeblocks (не получается создать приложение) C++
здравствуйте. с языком C++ я немного знаком. почему то не получается создать приложение в codeblocks. делаю так: file->new->project->console application выбираю язык C++
C++ Вычислить и напечатать значения напряженности поля E = F / q
желательно через MS Visual Studio При проведении эксперимента осуществлялось измерение кулоновской силы F, действующей по очереди на положительные заряды q1, q2, ..., qn, которые вносятся на одинаковое расстояние r в поле заряда. По данным эксперимента вычислить и напечатать таблицу значений напряженности поля E = F / q. Оригинал: 20. Під час проведення експерименту здійснювалось вимірювання...
C++ Пользовательские функции (Определить общее количество осадков за январь) http://www.cyberforum.ru/cpp-beginners/thread719716.html
В массиве хранятся сведения о количестве осадков, выпавших за каждый день января. Определить общее количество осадков за январь. Нужно сделать задание с использование пользовательских функций. Ниже приведен код без них. Помогите разобраться с этими функциями, буду благодарен! #include <stdio.h> #include <iostream> int main () { setlocale(LC_ALL,"Russian"); int...
C++ таблица факториалов. цикл Привет! Пожалуйста, помогите разобраться с таблицей факториалов. Вот мой код: /*Написать функцию "Факториал" в программу, использующую эту функцию для вывода таблицы факториалов*/ int Factorial (int a); void main() { int number; cout<<"number: "<<endl; cin>>number; int f = Factorial (number); подробнее

Показать сообщение отдельно
aoool
Сообщений: n/a
05.12.2012, 00:57     Ошибка при перегрузке оператора, не знаю как исправить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#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();
    Matrix<T> operator*(Matrix<T> m);
    friend Matrix<T> operator*(T k, Matrix<T> m);
    friend Matrix<T> operator*(Matrix<T> m, 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>::Matrix() {
    std::cout<<"Choose:"<<std::endl<<" 1 - to enter matrix values from the keyboard."<<std::endl
        <<" 2 - to read matrix from file."<<std::endl
        <<"Choose the way to initialize matrix: ";
    short int wayOfMatrixInitialization;
    std::cin>>wayOfMatrixInitialization;
    std::cout<<std::endl;
    reEntered:
    switch(wayOfMatrixInitialization) {
    case 1: keyboardMatrixInitialization(); break;
    case 2: fromFileMatrixInitialization(); break;
    default: std::cout<<"Wrong choice. Please choose correct way of initialization: ";
        std::cin>>wayOfMatrixInitialization; 
        std::cout<<std::endl; 
        goto reEntered;
    }
}
 
template <class T>
Matrix<T>::Matrix(std::vector<innerVectorType> vect) {
    matrix = vector::vector(vect);
    myHeight = vect.size();
    myWidth = vect.begin().size();
}
 
template <class T>
int Matrix<T>::getHeight() {
    return myHeight;
}
 
template <class T>
int Matrix<T>::getWidth() {
    return myWidth;
}
 
template <class T>
void Matrix<T>::keyboardMatrixInitialization() {
    std::cout<<"Enter the matrix size with a space between (ex.: heigth width): ";
    std::cin>>myHeight>>myWidth;
    std::cout<<"Enter matrix values:"<<std::endl;
    for(unsigned int i = 0; i < myHeight; i++) {
        matrix.push_back(std::vector<T>());
        for(unsigned int j = 0; j < myWidth; j++) {
            T value;
            std::cin>>value;
            matrix.at(i).push_back(value);
        }
    }
    std::cout<<"Done."<<std::endl<<std::endl;
}
 
template <class T>
void Matrix<T>::fromFileMatrixInitialization() {
    //TODO
}
 
template <class T>
std::vector<innerVectorType> Matrix<T>::getMatrixVector() {
    return matrix;
}
 
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);
}
 
template <class T>
Matrix<T> operator*(Matrix<T> m, 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 new Matrix<T>(resultVector);
}
 
template <class T>
Matrix<T> Matrix<T>::operator*(Matrix<T> m) {
    //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 new Matrix<T>(resultVector);
}
 
template <class T>
void Matrix<T>::printMatrix() {
    std::cout<<"Matrix:"<<std::endl;
    for(unsigned int i = 0; i < myHeight; i++) {
        for(unsigned int j = 0; j < myWidth; j++) {
            if(j != myWidth-1) {
                std::cout<<matrix[i][j]<<" ";
            } else {
                std::cout<<matrix[i][j]<<std::endl;
            }
        }
    }
    std::cout<<std::endl;
}
Это был код класса.

Файл main():
C++
1
2
3
4
5
6
7
8
9
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

Я так понимаю она относится к этому участку:
C++
1
2
3
4
5
6
7
8
9
10
11
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);
}
Друзья, как решить не подскажите?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru