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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
DrSMERTb
60 / 36 / 4
Регистрация: 12.11.2010
Сообщений: 816
#1

Конструктор - C++

07.12.2011, 21:52. Просмотров 1032. Ответов 22
Метки нет (Все метки)

Всем доброго времени суток. Пишу программу, которая вычисляет ранг матрицы и выводит транспонированную. Вот код:
matr.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class matr
{
public: 
matr(int, int);
//matr();
~matr();
void out() const;
void trans();
float det();
private:
int n;
int m;
float x[50][50];
};
matr.cpp:
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
#include <iostream.h>
#include "matr.h"
 
//void matr::matr()
//{
//n=2;
//m=2;
//int i,j;
//for(i=0;i<n;i++)
//for(j=0;j<m;j++)
//{
//x[i][j]=0;
//}
//}
 
//----------------------------
void matr::matr(int k, int l)
{
n=k; m=l;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
x[i][j]=rand()%10;
}
}
//--------------------
void matr::out()const
{
int i,j; 
for(i=0;i<n;i++)
cout<<endl;
for(j=0;j<m;j++)
{
cout<<x[i][j]<<" ";
}
}
//------------------------------
void matr::trans()
{
if(m==n)
{ 
int i,j,a[50][50];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[j][i]=x[i][j];
for(i=0;i<n;i++)
cout<<endl;
for(j=0;j<m;j++)
{
cout<<a[i][j]<<" ";
}}
else cout<<"No trans!!!";
}
 
//--------------------------------
float matr::det()
{
float det=0;
if((m==3)&&(n==3))
{
det=x[1][1]*x[2][2]*x[3][3]+x[1][2]*x[2][3]*x[3][1]+x[1][3]*x[2][1]*x[3][2]-x[1][3]*x[2][2]*x[3][1]-x[1][2]*x[2][1]*x[3][3]-x[1][1]*x[2][3]*x[3][2];
return det;
}
}
ispoln.cpp:
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
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include "matr.cpp"
int main()
{
matr m1,m2;
int i,j,b,c;
float det;
//m1.matr();
m1.out();
cin>>b>>c;
//m2.matr(b,c);
cout<<"Matrix"<<endl<<endl;
m2.out();
cout<<endl<<endl<<"Trans Matrix"<<endl<<endl;
m2.trans();
m2.det();
if (det==0)
cout<<"No Det!!! Your Matrix - invalid";
else
cout<<endl<<endl<<"Det="<<det;
}
Ругается на ошибки в файле "matr.cpp" посмотрите код, подскажите, как его довести до работоспособного состояния.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2011, 21:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор (C++):

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -&gt; i = i; } }; Конструктор Test::Test всегда вызывается...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;math.h&gt; #include &lt;algorithm&gt; using...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Bers
Заблокирован
08.12.2011, 01:02 #16
Цитата Сообщение от DrSMERTb Посмотреть сообщение
остались ощибки
4 C:\...\Matr\matr.h matr::matr(int, int)
5 C:\...Matr\matr.cpp prototype for `matr::matr()' does not match any in class `matr'
Показывай исправленный код
0
DrSMERTb
60 / 36 / 4
Регистрация: 12.11.2010
Сообщений: 816
08.12.2011, 01:04  [ТС] #17
matr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class matr
{
public: 
matr(int, int);
matr();
~matr();
void out() const;
void trans();
float det();
private:
int n;
int m;
float x[50][50];
};
matr.cpp
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
#include <iostream.h>
#include "matr.h"
 
 matr::matr()
{
n=2;
m=2;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
x[i][j]=0;
}
}
 
//----------------------------
matr::matr(int k, int l)
{
n=k; m=l;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
x[i][j]=rand()%10;
}
}
//--------------------
void matr::out()const
{
int i,j; 
for(i=0;i<n;i++)
cout<<endl;
for(j=0;j<m;j++)
{
cout<<x[i][j]<<" ";
}
}
//------------------------------
void matr::trans()
{
if(m==n)
{ 
int i,j,a[50][50];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[j][i]=x[i][j];
for(i=0;i<n;i++)
cout<<endl;
for(j=0;j<m;j++)
{
cout<<a[i][j]<<" ";
}}
else cout<<"No trans!!!";
}
 
//--------------------------------
float matr::det()
{
float det=0;
if((m==3)&&(n==3))
{
det=x[1][1]*x[2][2]*x[3][3]+x[1][2]*x[2][3]*x[3][1]+x[1][3]*x[2][1]*x[3][2]-x[1][3]*x[2][2]*x[3][1]-x[1][2]*x[2][1]*x[3][3]-x[1][1]*x[2][3]*x[3][2];
return det;
}
}
ispoln.cpp
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
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include "matr.cpp"
int main()
{
matr m1,m2;
int i,j,b,c;
float det;
//m1.matr();
m1.out();
cin>>b>>c;
//m2.matr(b,c);
cout<<"Matrix"<<endl<<endl;
m2.out();
cout<<endl<<endl<<"Trans Matrix"<<endl<<endl;
m2.trans();
m2.det();
if (det==0)
cout<<"No Det!!! Your Matrix - invalid";
else
cout<<endl<<endl<<"Det="<<det;
}
0
Bers
Заблокирован
08.12.2011, 01:12 #18
DrSMERTb, обрати внимание:
C++
1
2
3
4
5
6
7
class matr
{
public: 
matr(int, int);
matr();
~matr();  //ты знаешь что это такое?
....
А теперь покажи в коде, где находится реализация диструктора.
0
DrSMERTb
60 / 36 / 4
Регистрация: 12.11.2010
Сообщений: 816
08.12.2011, 01:21  [ТС] #19
Он пока не вызывается, но я как то думал что не обязательно обрабатывать все заявленные функции..
Переделал вот что получил
matr.cpp
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
#include <iostream.h>
#include "matr.h"
 
 matr::matr()
{
n=2;
m=2;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
x[i][j]=0;
}
}
 
//----------------------------
matr::matr(int k, int l)
{
n=k; m=l;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
x[i][j]=rand()%10;
}
}
//--------------------
 //деструктор
  matr::~matr() 
  {
  cout<<"DESTRUCTOR"<<endl;
  } 
//--------------------
void matr::out()const
{
int i,j; 
for(i=0;i<n;i++)
cout<<endl;
for(j=0;j<m;j++)
{
cout<<x[i][j]<<" ";
}
}
//------------------------------
void matr::trans()
{
if(m==n)
{ 
int i,j,a[50][50];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[j][i]=x[i][j];
for(i=0;i<n;i++)
cout<<endl;
for(j=0;j<m;j++)
{
cout<<a[i][j]<<" ";
}}
else cout<<"No trans!!!";
}
 
//--------------------------------
float matr::det()
{
float det=0;
if((m==3)&&(n==3))
{
det=x[1][1]*x[2][2]*x[3][3]+x[1][2]*x[2][3]*x[3][1]+x[1][3]*x[2][1]*x[3][2]-x[1][3]*x[2][2]*x[3][1]-x[1][2]*x[2][1]*x[3][3]-x[1][1]*x[2][3]*x[3][2];
return det;
}
}
ispoln.cpp
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
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include "matr.cpp"
int main()
{
matr m1,m2;
int i,j,b,c;
float det;
//m1.matr();
m1.out();
cin>>b>>c;
//m2.matr(b,c);
cout<<"Matrix"<<endl<<endl;
m2.out();
cout<<endl<<endl<<"Trans Matrix"<<endl<<endl;
m2.trans();
m2.det();
if (det==0)
cout<<"No Det!!! Your Matrix - invalid";
else
cout<<endl<<endl<<"Det="<<det;
matr();//вызов дестуктора
//в предыдущей проге пытался вызвать типа такого ~matr() выдавал ошибки без тильды заработал
}
Добавлено через 1 минуту
Ошибки не исчезли и не изменились.
0
Bers
Заблокирован
08.12.2011, 01:24 #20
Цитата Сообщение от DrSMERTb Посмотреть сообщение
matr();//вызов дестуктора
закомментируй
0
DrSMERTb
60 / 36 / 4
Регистрация: 12.11.2010
Сообщений: 816
08.12.2011, 01:35  [ТС] #21
Да в основном сейчас разбираем ошибки из matr.cpp, а если учесть и ispoln.cpp то у меня всё вместе получается 6 ошибок, вот всё кроме предупреждений что пишет компилятор:
note C:\...\Matr\matr.h:2 matr::matr(int, int)
note C:\...\Matr\matr.h:2 candidates are: matr::matr(const matr&)
9 C:\...\isz.cpp no matching function for call to `matr::matr()'
note C:\...\Matr\matr.h:2 matr::matr(int, int)
note C:..\Matr\matr.h:2 candidates are: matr::matr(const matr&)
9 C:\...Matr\isz.cpp no matching function for call to `matr::matr()'
C:\...Matr\isz.cpp In function `int main()':
C:\...\matr.cpp In member function `void matr::trans()':
4 C:\...\Matr\matr.h matr::matr(int, int)
error C:\...\matr.h:2 candidates are: matr::matr(const matr&)
5 C:\...\matr.cpp prototype for `matr::matr()' does not match any in class `matr'
6 C:\...\isz.cpp In file included from C:\Users\DrSMERTb\Desktop\Matr\isz.cpp
1 C:\...\isz.cpp from C:\Users\DrSMERTb\Desktop\Matr\isz.cpp

Добавлено через 3 минуты
Извините, но сильно спать хочется у меня уже пол 8-го утра, напишите что вы думаете по поводу этих ошибок, я потом прочту и попробую прислушиваясь в вашим советам, исправить их...
0
Bers
Заблокирован
08.12.2011, 01:44 #22
C++
1
2
3
4
#include <math.h>
#include "matr.cpp"  //это ты так единицы трансляции
                              // к своему проекту цепляешь?
                        //считаешь это правильным?
0
DrSMERTb
60 / 36 / 4
Регистрация: 12.11.2010
Сообщений: 816
08.12.2011, 08:51  [ТС] #23
Вот что получил:
ispoln.cpp
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
#include <iostream.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include "matr.cpp"
int main()
{
matr m1,m2;
int i,j,b,c;
float det;
//m1.matr();
cout<<"Vvedite razmernost matr= ";
m1.out();
cin>>b>>c;
//m2.matr(3,3);
cout<<"Matrix"<<endl;
m2.out();
cout<<"Trans Matrix"<<endl;
m2.trans();
m2.det();
//if (det==0)
//cout<<"No Det!!! Your Matrix - invalid";
//else
cout<<endl<<endl<<"Det="<<det;
matr();//âûçîâ äåñòðóêòîðГ*
_getch();
}
Тут в 16 строке поидее не следует закоменчивать, но тогда пишит что "ошибочное использование функции". Но в таком случае как у меня на данный момент он использует класс по умолчанию.
matr.cpp
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
#include <iostream.h>
#include "matr.h"
 
 
 
//----------------------------
matr::matr(int k, int l)
{
n=k; m=l;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
x[i][j]=rand()%10;
}
}
//--------------------
matr::matr()
{
n=2;
m=2;
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
x[i][j]=rand()%10;
}
}
//äåñòðóêòîð
  matr::~matr() 
  {
  cout<<"DESTRUCTOR"<<endl;
  } 
//--------------------
void matr::out()const
{
int i,j; 
for(i=0;i<n;i++)
{
cout<<endl;
for(j=0;j<m;j++)
{
cout<<x[i][j]<<" ";
}
}
}
//------------------------------
void matr::trans()
{
int i,j,a[3][3]={0,0,0,0,0,0,0,0,0};
if(m==n)
{
for(i=0;i<n;i++)
{
cout<<endl;
for(j=0;j<m;j++)
a[j][i]=x[i][j];
for(i=0;i<n;i++)
cout<<endl;
for(j=0;j<m;j++)
{
cout<<a[i][j]<<" ";
}
}
}
else cout<<"No trans!!!";
}
 
//--------------------------------
float matr::det()
{
float det=0;
if((m==3)&&(n==3))
{
det=x[1][1]*x[2][2]*x[3][3]+x[1][2]*x[2][3]*x[3][1]+x[1][3]*x[2][1]*x[3][2]-x[1][3]*x[2][2]*x[3][1]-x[1][2]*x[2][1]*x[3][3]-x[1][1]*x[2][3]*x[3][2];
return det;
}
else if((m==2)&&(n==2))
det=1000;
return det;
}
matr.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class matr
{
public: 
matr();
matr(int, int);
~matr();
void out() const;
void trans();
float det();
private:
int n;
int m;
float x[50][50];
};
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2011, 08:51
Привет! Вот еще темы с ответами:

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...

Конструктор инициализации, конструктор копирования, деструктор - C++
Я сделал почти задание по перегрузке операторов. Осталось одно, тоесть три: конструктор инициализации, конструктор копирования, деструктор....

Создать класс "Вектор" и реализовать конструктор по умолчанию, конструктор копирования и деструктор - C++
Всем доброго времени суток! нужна ваша помощь! нужно создать класс вектор и реализовать конструктор по умолчанию, копирования и...

Конструктор класса не видит конструктор по умолчанию другого класса - C++
Ошибка, естественно, в Classes.cpp, в строке 20. Ругается, что у класса TailNode нет конструктора по умолчанию, хотя он там, конечно, есть....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.12.2011, 08:51
Ответ Создать тему
Опции темы

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