64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
1

Конструктор

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

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Пишу программу, которая вычисляет ранг матрицы и выводит транспонированную. Вот код:
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2011, 21:52
Ответы с готовыми решениями:

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

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) { this-&gt;iType_act =...

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

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

22
Заблокирован
07.12.2011, 23:07 2
1. Работает, но делает не то что надо. (описание неисправности)

2. Крошится в рантайме, под ругательства системы. (скриншот, или примерное описание текста сообщение системы)

3. Не компилируется. (Точный текст ошибки компилятора. Желательно - с указанием точных строчек кода, на которые ругнулся компилятор)

4. Не компонуется. (Точный текст ошибки компоновщика.)

Телепаты в отпуске.
1
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
07.12.2011, 23:26  [ТС] 3
18 строка : C:...Matr\matr.cpp return type specification for constructor invalid
9 строка : 9 C:\...\Matr\isz.cpp no matching function for call to `matr::matr()'
и вот ещё ошибки:
note C:\....Matr\matr.h:2 candidates are: matr::matr(const matr&)
note C:\...\Matr\matr.h:2 matr::matr(int, int)
note C:\...\matr.h:2 matr::matr(int, int)
note C:\...\Matr\matr.h:2 candidates are: matr::matr(const matr&)
0
Заблокирован
07.12.2011, 23:31 4
Обратите внимание:

в файле ispoln.cpp:

C++
1
2
3
4
5
int main()
{
matr m1,m2; //здесь вы создаете 
                //два объекта класса матрицы
...
Так как для объектов не указаны явные конструкторы, с помощью которых объекты будут построены, то они будут конструироваться конструктором по умолчанию.

Покажите мне в коде матрицы, где находится конструктор по умолчанию?
0
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
07.12.2011, 23:42  [ТС] 5
Как я понимаю matr();-это конструктор по умолчанию, а
C++
1
2
3
4
5
6
7
8
9
10
11
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;
}
}
это его заполнение, там закаменчено просто было.
0
Заблокирован
07.12.2011, 23:44 6
DrSMERTb, То есть, ты за комментировал код, а потом удивляешься, что компилятор его не нашёл?
0
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
07.12.2011, 23:51  [ТС] 7
Нет) Просто с этим кодом он ругался ещё больше...

Добавлено через 36 секунд
Да, а что по остальным ошибкам?
0
Заблокирован
07.12.2011, 23:53 8
Цитата Сообщение от DrSMERTb Посмотреть сообщение
Нет) Просто с этим кодом он ругался ещё больше...
То есть, вы преднамеренно создаете ошибку, что бы до других ошибок компиляция даже не дошла? Что бы процесс компиляции программы загнулся ещё раньше?

Это у вас такой способ борьбы с ошибками: не исправлять их, а создавать ещё более фатальные?

Добавлено через 43 секунды
Цитата Сообщение от DrSMERTb Посмотреть сообщение
Да, а что по остальным ошибкам?
Вы исправили первую ошибку? Вы изменили код?
Теперь компилируйте заново. И если есть ещё какие то ошибки, то:


Цитата Сообщение от Bers Посмотреть сообщение
1. Работает, но делает не то что надо. (описание неисправности)
2. Крошится в рантайме, под ругательства системы. (скриншот, или примерное описание текста сообщение системы)
3. Не компилируется. (Точный текст ошибки компилятора. Желательно - с указанием точных строчек кода, на которые ругнулся компилятор)
4. Не компонуется. (Точный текст ошибки компоновщика.)
Телепаты в отпуске.
0
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
08.12.2011, 00:23  [ТС] 9
4 C:\...\Matr\matr.h matr::matr(int, int)
18 C:\....\Matr\matr.cpp return type specification for constructor invalid
error C:\...\Matr\matr.h:2 candidates are: matr::matr(const matr&)
5 C:\...\Matr\matr.cpp prototype for `matr::matr()' does not match any in class `matr'
0
Заблокирован
08.12.2011, 00:29 10
DrSMERTb, а текст исправленный где?
Ты думаешь, я вижу, чего ты там наисправлял?
0
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
08.12.2011, 00:36  [ТС] 11
раскоментил
C++
1
2
3
4
5
6
7
8
9
10
11
//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;
}
}
и в matr.h:
matr();
0
Заблокирован
08.12.2011, 00:45 12
Обрати внимание:

в файле matr.h:

C++
1
2
3
4
5
6
class matr
{
public: 
matr(int, int);//здесь ты объявляешь конструктор 
                   //с параметрами
....
А вот здесь:

в файле matr.cpp:
C++
1
2
3
4
5
6
7
8
9
10
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?
0
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
08.12.2011, 00:50  [ТС] 13
Получается его через int прописать?
0
Заблокирован
08.12.2011, 00:53 14
Цитата Сообщение от DrSMERTb Посмотреть сообщение
Получается его через int прописать?
Открывай учебник. Раздел "классы". Читай, как грамотно оформляются конструкторы класса.
0
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
08.12.2011, 01:01  [ТС] 15
Ха вот переклинило, точно тут же просто пишется matr::matr(int k, int l)...

Добавлено через 3 минуты
Переделал прописал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 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;
}
}
остались ощибки
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
Заблокирован
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
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
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
Заблокирован
08.12.2011, 01:12 18
DrSMERTb, обрати внимание:
C++
1
2
3
4
5
6
7
class matr
{
public: 
matr(int, int);
matr();
~matr();  //ты знаешь что это такое?
....
А теперь покажи в коде, где находится реализация диструктора.
0
64 / 40 / 10
Регистрация: 12.11.2010
Сообщений: 841
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
Заблокирован
08.12.2011, 01:24 20
Цитата Сообщение от DrSMERTb Посмотреть сообщение
matr();//вызов дестуктора
закомментируй
0
08.12.2011, 01:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2011, 01:24
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru