Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
snikita
0 / 0 / 0
Регистрация: 05.05.2018
Сообщений: 3
1

Шаблоны класса:Матрица. Ошибка бинарный "=": не найден оператор, принимающий правый операнд типа "Matr<T>"

27.05.2018, 19:35. Просмотров 234. Ответов 3
Метки нет (Все метки)

Выдает ошибку "бинарный "=": не найден оператор, принимающий правый операнд типа "Matr<T>" (или приемлемое преобразование отсутствует)
1> with
1> [
1> T=double
1> ]
1> c:\users\\desktop\лаб\лаб\matr.h(28): может быть "Matr<T> &Matr<T>::operator =(Matr<T> &)"
1> with
1> [
1> T=int
1> ]
1> при попытке сопоставить список аргументов "(Matr<T>, Matr<T>)"
1> with
1> [
1> T=int
1> ]
1> and
1> [
1> T=double
1> ]"

Подскажите, пожалуйста, как можно решить эту проблему?

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
#ifndef MATR_H
#define MATR_H
 
template <class T>
class Matr
{
    unsigned n, m;
    T *p;
 
public:
    Matr();
    Matr(unsigned N, unsigned M);
    Matr(Matr&B);
 
    ~Matr(){delete[]p;p=0;}
 
    /*T& operator[](unsigned I, unsigned J)
        {
            return p[I*m+J];
        }
 
    const T& operator[](unsigned I, unsigned J) const
        {
            return p[I*m+J];
        }*/
 
 
    Matr & operator = (Matr &B);
 
    template <class T>
    friend istream & operator>>(istream &stream, Matr<T>&B);
 
    template <class T>
    friend ostream & operator<<(ostream &stream, Matr<T>&B);
};
#endif
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
#ifndef MATR_CPP
#define MATR_CPP
 
#include<iostream>
#include<fstream>
#include<iomanip>
#include<windows.h>
using namespace std;
#include "Matr.h"
 
template <class T>
Matr<T>::Matr() 
{
    n=2;
    m=2;
    p=new T[n*m];
}
 
template <class T>
Matr<T>::Matr(unsigned N, unsigned M) 
{
    n=N;
    m=M;
    p=new T[n*m];
}
 
template <class T>
Matr<T>::Matr(Matr<T>&B) 
{
    n=B.n;
    m=B.m;
    p=new T[n*m];
    for(unsigned i=0; i<n; i++)
        for(unsigned j=0; j<m; j++)
            p[i*j]=B(i,j);
}
 
template <class T>
Matr<T> &Matr<T>::operator=(Matr<T> &)
    {
        if(this==&B)
            return *this;
        n=B.n;
        m=B.m;
        delete []p;
        p=new T[n];
        for(unsigned i=0; i<n; i++)
            for(unsigned j=0; j<m; j++)
                p[i*j]=B(i,j);
    }
 
template <class T>
istream &operator>>(istream &stream, Matr<T> &B)
{
    for (unsigned i=0; i<B.n; i++)
        for (unsigned j=0; j<B.m; j++)
            stream>>B(i,j);
    return stream;
}
 
template <class T>
ostream &operator<<(ostream &stream, Matr<T>& B)
{
    for (unsigned i=0; i<B.n; i++)
    {
        for (unsigned j=0; j<B.m; j++)
            stream<<setw(4)<<B(i,j);
            cout<<endl;
    }
    return stream;
}
#endif
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
#include<iostream>
#include<fstream>
#include<iomanip>
#include<windows.h>
using namespace std;
#include"Matr.h"
#include"Matr.cpp"
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Matr<int> A;
    Matr<double> C;
    
 
 
 
    cout<<"Введите матрицу A"<<endl;
    cin>>A;
    cout<<"Матрица A:"<<endl;
    cout<<A<<endl;
 
    cout<<"Введите матрицу С"<<endl;
    cin>>C;
    cout<<"Матрица С:"<<endl;
    cout<<C<<endl;
 
    A=C;
    cout<<"Матрица С:"<<endl;
    cout<<C<<endl;
 
 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2018, 19:35
Ответы с готовыми решениями:

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include...

Ошибка : бинарный "<<": не найден оператор, принимающий правый операнд типа point
В задаче нужно найти две наиболее удаленные друг от друга очки. выдает...

Ошибка "не найден оператор, принимающий правый операнд типа "const std::string" "
Привет. Подчеркивает Name. Как можно обратиться к public string из класса...

Error C2679: бинарный "=": не найден оператор, принимающий правый операнд типа
Сразу скажу что в с++ полный ноль. Но есть потребность решить такую вот задачу:...

C2678 бинарный ">>": не найден оператор, принимающий левый операнд типа "std::ostream"
Код: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;typeinfo&gt; #include...

3
Cortas
128 / 104 / 64
Регистрация: 14.03.2016
Сообщений: 353
Завершенные тесты: 5
27.05.2018, 20:06 2
snikita, шаблонны нельзя разделять по разным файлам.
Тут подробней
0
snikita
0 / 0 / 0
Регистрация: 05.05.2018
Сообщений: 3
28.05.2018, 09:18  [ТС] 3
Cortas, не помогло, выдает такую же ошибку
0
Cortas
128 / 104 / 64
Регистрация: 14.03.2016
Сообщений: 353
Завершенные тесты: 5
28.05.2018, 09:40 4
C++
1
Matr<T> & operator = (Matr<T> &B);
Для такого присваивания тип данных матрицы в которую записывают данные должна совпадать с типом матрицы откуда записывают, а у вас типы различны - int и double
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2018, 09:40

Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream"
Собственно, текст ошибки приведен в названии темы. Сам код: #include...

Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
Вот ошибка 1&gt;------ Построение начато: проект: ыпошряоям, Конфигурация: Debug...

Бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream"
Подскажите, пожалуйста, как решить проблему. Хочу перегрузить оператор ввода,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru