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

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

Восстановить пароль Регистрация
 
 
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
07.12.2011, 21:52     Конструктор #1
Всем доброго времени суток. Пишу программу, которая вычисляет ранг матрицы и выводит транспонированную. Вот код:
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" посмотрите код, подскажите, как его довести до работоспособного состояния.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2011, 21:52     Конструктор
Посмотрите здесь:

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) C++
C++ Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования
C++ Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику
Конструктор инициализации, конструктор копирования, деструктор C++
C++ Конструктор производного класса требует конструктор предка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
07.12.2011, 23:07     Конструктор #2
1. Работает, но делает не то что надо. (описание неисправности)

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

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

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

Телепаты в отпуске.
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
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&)
Bers
Заблокирован
07.12.2011, 23:31     Конструктор #4
Обратите внимание:

в файле ispoln.cpp:

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

Покажите мне в коде матрицы, где находится конструктор по умолчанию?
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
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;
}
}
это его заполнение, там закаменчено просто было.
Bers
Заблокирован
07.12.2011, 23:44     Конструктор #6
DrSMERTb, То есть, ты за комментировал код, а потом удивляешься, что компилятор его не нашёл?
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
07.12.2011, 23:51  [ТС]     Конструктор #7
Нет) Просто с этим кодом он ругался ещё больше...

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

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

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


Цитата Сообщение от Bers Посмотреть сообщение
1. Работает, но делает не то что надо. (описание неисправности)
2. Крошится в рантайме, под ругательства системы. (скриншот, или примерное описание текста сообщение системы)
3. Не компилируется. (Точный текст ошибки компилятора. Желательно - с указанием точных строчек кода, на которые ругнулся компилятор)
4. Не компонуется. (Точный текст ошибки компоновщика.)
Телепаты в отпуске.
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
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'
Bers
Заблокирован
08.12.2011, 00:29     Конструктор #10
DrSMERTb, а текст исправленный где?
Ты думаешь, я вижу, чего ты там наисправлял?
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
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();
Bers
Заблокирован
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?
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
08.12.2011, 00:50  [ТС]     Конструктор #13
Получается его через int прописать?
Bers
Заблокирован
08.12.2011, 00:53     Конструктор #14
Цитата Сообщение от DrSMERTb Посмотреть сообщение
Получается его через int прописать?
Открывай учебник. Раздел "классы". Читай, как грамотно оформляются конструкторы класса.
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
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'
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'
Показывай исправленный код
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
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;
}
Bers
Заблокирован
08.12.2011, 01:12     Конструктор #18
DrSMERTb, обрати внимание:
C++
1
2
3
4
5
6
7
class matr
{
public: 
matr(int, int);
matr();
~matr();  //ты знаешь что это такое?
....
А теперь покажи в коде, где находится реализация диструктора.
DrSMERTb
 Аватар для DrSMERTb
59 / 35 / 4
Регистрация: 12.11.2010
Сообщений: 808
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 минуту
Ошибки не исчезли и не изменились.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2011, 01:24     Конструктор
Еще ссылки по теме:

Конструктор класса не видит конструктор по умолчанию другого класса C++
C++ Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно»
C++ Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
08.12.2011, 01:24     Конструктор #20
Цитата Сообщение от DrSMERTb Посмотреть сообщение
matr();//вызов дестуктора
закомментируй
Yandex
Объявления
08.12.2011, 01:24     Конструктор
Ответ Создать тему
Опции темы

Текущее время: 06:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru