Есть программа калькулятор матрица
Я использовал класс, мне нужно использовать дружественную функцию
У меня есть идея создать 2 класса, один класс создает и выводит матрицу ,2 операции над матрицами.И я хочу вызвать методы из 1 класса в 2 с помощью дружественной функции но не знаю как сделать.
код
Код:
#pragma once
#include <string>
using namespace std;
class sq
{
double **a;
int r;
int c;
public:
sq();
void set();
void get();
~sq();
};
Код:
#include "sq.h"
#include <iostream>
sq::sq()
{
}
void sq ::set()
{
setlocale(LC_ALL, "Russian");
cout << "Введите Матрицу" << c << "x" << r << endl;
double **a = new double*[r];
for (int i = 0; i < r; i++)
{
a[i] = new double[c];
for (int j = 0; j < c; j++)
{
cin >> a[i][j];
}
}
}
void sq::get()
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
sq::~sq()
{
}
Код:
void Matr::menu()
{
string s;
setlocale(LC_ALL, "Russian");
cout << "1 Сложение матриц " << endl;
cout << "2 Вычитание Матриц" << endl;
cout << "3 Умножение Матриц" << endl;
cout << "4 Деление Матриц" << endl;
cout << "5 Проверка на равенство" << endl;
cout << "6 Обратная Матрица" << endl;
cout << "7 траспонирование " << endl;
cout << "8 возведение" << endl;
cout << "9 Вычисление Детерминанты " << endl;
cout << "10 вычисление нормы " << endl;
cout << "11 Тип Матрицы" << endl;
cout << "12 Разделение матриц на число" << endl;
cout << "13 Умножение матрицы на число" << endl;
cin >> s;
if (s == "1")
{
cout << "1 Сложение матриц " << endl;
Matr c;
int cc, cr, cc2, cr2;
cout << "Введите кол-во стобцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
cout << "Введите кол-во стобцов и строк второй матрицы" << endl;
cin >> cc2 >> cr2;
Matr b(cc2, cr2);
if (a.r == b.r && a.c == b.c)
{
cout << "Заполните матрицу" << endl;
set(a);
get(a);
cout << "Заполните 2 матрицу" << endl;
set(b);
get(b);
c = a + b;
cout << "Результат" << endl;
get(c);
menu();
}
else {
cout << "ОШИБКА ! Матрица не могут быть сложены " << endl;
menu();
}
}
else if (s == "2")
{
cout << "Вычитание матриц" << endl;
Matr c;
int cc, cr, cc2, cr2;
cout << "Введите кол-во стобцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
cout << "Введите кол-во стобцов и строк второй матрицы" << endl;
cin >> cc2 >> cr2;
Matr b(cc2, cr2);
if (a.r == b.r && a.c == b.c) {
cout << "Заполните матрицу" << endl;
set(a);
cout << " " << endl;
get(a);
cout << "Заполните 2 матрицу" << endl;
get(b);
cout << " " << endl;
get(b);
c = a - b;
cout << "Результат:" << endl;
get(c);
menu();
}
else
{
cout << "ОШИБКА ! " << endl;
menu();
}
}
else if (s == "3")
{
cout << "Умножение матриц" << endl;
Matr c;
int cc, cr, cc2, cr2;
cout << "Введите кол-во стобцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
cout << "Введите кол-во стобцов и строк второй матрицы" << endl;
cin >> cc2 >> cr2;
Matr b(cc2, cr2);
if (a.c == b.r)
{
cout << "Заполните матрицу" << endl;
set(a);
cout << " " << endl;
get(a);
cout << "Заполните 2 матрицу" << endl;
set(b);
cout << " " << endl;
get(b);
c = a*b;
cout << "Результат:" << endl;
get(c);
menu();
}
else {
cout << "ERROR! " << endl;
menu();
}
}
else if (s == "4")
{
cout << "Разделение матриц" << endl;
Matr c;
int cc, cr, cc2, cr2;
cout << "Введите количество столбцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
cout << "Введите количество столбцов и строк второй матрицы" << endl;
cin >> cc2 >> cr2;
Matr b(cc2, cr2);
if (a.c == b.r)
{
cout << "Заполните матрицу" << endl;
set(a);
cout << " " << endl;
get(a);
cout << "Заполните 2 матрицу" << endl;
set(b);
cout << " " << endl;
get(b);
c = a / b;
cout << "Результат:" << endl;
get(b);
menu();
}
}
else if (s == "5")
{
cout << "Тестирование на равенство" << endl;
int cc, cr, cc2, cr2;
cout << "Введите количество столбцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
cout << "Введите количество столбцов и строк второй матрицы" << endl;
cin >> cc2 >> cr2;
Matr b(cc2, cr2);
if (a.c == b.r) {
cout << "Заполните матрицу" << endl;
set(a);
cout << " " << endl;
get(a);
cout << "Заполните 2 матрицу" << endl;
set(b);
cout << " " << endl;
get(b);
if (a == b)
{
cout << "a=b" << endl;
menu();
}
else {
cout << "a!=b" << endl;
menu();
}
}
else {
cout << "a!=b" << endl;
menu();
}
}
else if (s == "6")
{
cout << "Вычисление обратной матрицы" << endl;
int cc, cr;
cout << "Введите количество столбцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
if (a.TypeSq() == true)
{
set(a);
get(a);
a.ObratMatr();
get(a);
menu();
}
else
{
cout << "Матрица не имеет обратного" << endl;
menu();
}
}
else if (s == "7")
{
cout << "Расчет транспонированной матрицы" << endl;
int cc, cr;
cout << "Введите количество столбцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
if (a.TypeSq() == true)
{
set(a);
get(a);
a.TransMatr();
get(a);
menu();
}
else
{
cout << "матрица не может быть транспозиции" << endl;
menu();
}
}
else if (s == "8")
{
cout << "Возведение" << endl;
int cc, cr, n;
cout << "Введите количество столбцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
if (a.TypeSq() == true)
{
set(a);
get(a);
cout << "Введите степень" << endl;
cin >> n;
a = a^n;
get(a);
menu();
}
else
{
cout << "матрица не может" << endl;
menu();
}
}
else if (s == "9")
{
cout << "Вычисление определителя" << endl;
int cc, cr;
cout << "Введите количество столбцов и строк матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
if (a.TypeSq() == true) {
set(a);
get(a);
cout << "Определитель = " << a.det(a.r) << endl;
menu();
}
else
{
cout << "Определитель не можеть быть вычисленым " << endl;
menu();
}
}
else if (s == "10")
{
cout << "Вычисление нормы" << endl;
int cc, cr;
cout << "Введите количество столбцов и строк матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
set(a);
get(a);
a.MatrNorm();
menu();
}
else if (s == "11") {
int cc, cr;
cout << "Введите количество столбцов и строк матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
set(a);
get(a);
a.TypeMatr();
menu();
}
else if (s == "12")
{
cout << "Разделение матриц на число" << endl;
Matr c;
double ch;
int cc, cr;
cout << "Введите количество столбцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
cout << "Заполните матрицу" << endl;
set(a);
cout << " " << endl;
get(a);
cout << "Введите число" << endl;
cin >> ch;
c = a /= ch;
cout << "Результат:" << endl;
get(c);
menu();
}
else if (s == "13")
{
cout << "Умножение матриц на число" << endl;
Matr c;
double ch;
int cc, cr;
cout << "Введите количество столбцов и строк первой матрицы" << endl;
cin >> cc >> cr;
Matr a(cc, cr);
cout << "Заполните матрицу" << endl;
set(a);
cout << " " << endl;
get(a);
cout << "Введите число" << endl;
cin >> ch;
c = a *= ch;
cout << "Результат:" << endl;
get(c);
menu();
}
}
Выдает ошибку LNK2019