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

В чем ошибка программы? - C++

Восстановить пароль Регистрация
 
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
04.06.2013, 17:44     В чем ошибка программы? #1
C++
1
2
konstruktor.setmatr();
konstruktor.printmatr();
Вот на этих командах выдает ошибку!???

Кликните здесь для просмотра всего текста
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
//oop-class
 #include <windows.h>
 #include <iostream>
 #include <stdlib.h>
 #include <math.h>
 #include <ctime>
 #include <iomanip>
 using namespace std;
 
 class matrica   //класс
  {
     int a, b;
     int **matr;               //указатель на указатель
     public:
            matrica(int, int);   
           ~matrica();
     void printmatr();
     void setmatr();
  };        
    
  
  void matrica::printmatr()  
  {
   int stroka, stolbec;   
        
   for (stroka = 0; stroka < a; ++stroka)
       {
       for (stolbec = 0; stolbec < b; ++stolbec)
           {
                cout << setw(5) << matr [stroka][stolbec];
           }
           cout << endl;
        }
        cout << endl; 
  }    
         
             
  matrica::matrica (int stroka,int stolbec) : a(stroka), b(stolbec)    //конструктор
  { 
       matr = new int*[a];                      //создает столбец указателей
       for (stroka = 0; stroka < a; ++stroka)
       matr [stroka] = new int[b];              //создает строки из столбца
        
 
  }   
  void matrica::setmatr()
  {
      int stroka, stolbec;
      srand(time(NULL));
           
       for (stroka = 0; stroka < a; ++stroka)
       {
           for (stolbec = 0; stolbec < b; ++stolbec)
           {
                matr [stroka][stolbec] = rand() % 100;
           }
            
       }
              
  }
  
  matrica::~matrica()         //деструктор
  {
         for (int stroka = 0; stroka < a; ++stroka)
         delete [] matr [stroka];
         delete [] matr;
  }
      
 int main()   //функция main
 {   
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
   
    int stroka, stolbec;
    
    cout << "число строк = ";
     cin >> stroka;
    cout << endl;
    cout << "число столбцов = ";
     cin >> stolbec;
    cout << endl; 
    
    if (stroka > 0 && stolbec > 0)
    {
      matrica konstruktor(stroka, stolbec);
    }
    else
    {
      cout << "Таблица не может быть отрицательным или равняться нулю !!!" << endl;
    }
    konstruktor.setmatr();
    konstruktor.printmatr();
    
    cout << endl;  
    system("pause");
    return 0;
 }

Объясните пожалуйста в чем ошибка.

Добавлено через 12 минут
???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 17:44     В чем ошибка программы?
Посмотрите здесь:

В чем ошибка???? C++
В чем ошибка C++
C++ Чем опасны программы написанные на C++
C++ Не работают программы, в чем ошибка?
C++ Код программы на языке С++. Не могу понять в чем ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igor921
Заблокирован
04.06.2013, 17:56     В чем ошибка программы? #2
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "stdafx.h"
#include <windows.h>
 #include <iostream>
 #include <stdlib.h>
 #include <math.h>
 #include <ctime>
 #include <iomanip>
 using namespace std;
 
 class matrica   //класс
  {
     int a, b;
     int **matr;               //указатель на указатель
     public:
            matrica(int, int);   
           ~matrica();
     void printmatr();
     void setmatr();
  };        
    
  
  void matrica::printmatr()  
  {
   int stroka, stolbec;   
        
   for (stroka = 0; stroka < a; ++stroka)
       {
       for (stolbec = 0; stolbec < b; ++stolbec)
           {
                cout << setw(5) << matr [stroka][stolbec];
           }
           cout << endl;
        }
        cout << endl; 
  }    
         
             
  matrica::matrica (int stroka,int stolbec) : a(stroka), b(stolbec)    //конструктор
  { 
       matr = new int*[a];                      //создает столбец указателей
       for (stroka = 0; stroka < a; ++stroka)
       matr [stroka] = new int[b];              //создает строки из столбца
        
 
  }   
  void matrica::setmatr()
  {
      int stroka, stolbec;
      srand(time(NULL));
           
       for (stroka = 0; stroka < a; ++stroka)
       {
           for (stolbec = 0; stolbec < b; ++stolbec)
           {
                matr [stroka][stolbec] = rand() % 100;
           }
            
       }
              
  }
  
  matrica::~matrica()         //деструктор
  {
         for (int stroka = 0; stroka < a; ++stroka)
         delete [] matr [stroka];
         delete [] matr;
  }
      
 int main()   //функция main
 {   
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
   matrica * konstruktor;
    int stroka, stolbec;
    
    cout << "число строк = ";
     cin >> stroka;
    cout << endl;
    cout << "число столбцов = ";
     cin >> stolbec;
    cout << endl; 
    
   if (stroka > 0 && stolbec > 0)
    {
      konstruktor = new matrica(stroka, stolbec);
    }
    else
    {
      cout << "Таблица не может быть отрицательным или равняться нулю !!!" << endl;
    }
    konstruktor->setmatr();
    konstruktor->printmatr(); 
    cout << endl;  
    system("pause");
    delete konstruktor;
    return 0;
 }
Добавлено через 33 секунды
Это динамически.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.06.2013, 17:58     В чем ошибка программы? #3
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Объясните пожалуйста в чем ошибка.
У вас объект konstruktor создан в теле if(), поэтому виден только в нём.
igor921
Заблокирован
04.06.2013, 18:02     В чем ошибка программы? #4
Правильно сказал alsav22. Если хотите проверить вводимые данные, делайте это до создания объекта или в конструкторе
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
04.06.2013, 18:22  [ТС]     В чем ошибка программы? #5
Цитата Сообщение от igor921 Посмотреть сообщение
konstruktor = new matrica(stroka, stolbec);
А почему именно так? Ведь динамическая память выделяется в конструкторе.

Добавлено через 18 минут
Цитата Сообщение от igor921 Посмотреть сообщение
#include "stdafx.h"
А что она выполняет?
Moiseej
Сообщений: n/a
04.06.2013, 18:37     В чем ошибка программы? #6
в 15й строке ошибка `;' before ':' token не пойму где пропустил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
#include<cmath>
using namespace std;
int main() {
double a,b,c,x,D;
bool first,second;
cout<<" a=";
cin>>a;
cout<<" b=";
cin>>b;
cout<<" c=";
cin>>c;
D=b*b-4*a*c;
first=(D>=0);
first?second=(D>0):(cout<<"NO ROOTS\n"<<endl,exit(0));
second?cout<<"x1 is"<<(b*(-1)+sqrt(D))/2*a<<"x2 is"<<(b*(-1)-sqrt(D))/2*a"\n":cout<<"x is"<<b*(-1)/2*a"\n";
return 0;
}
(программа для решения квадратных уравнений стандартного вида , учусь C++)
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
04.06.2013, 18:52  [ТС]     В чем ошибка программы? #7
Moiseej, Это какое отношение имеет к этой теме?
igor921
Заблокирован
04.06.2013, 18:57     В чем ошибка программы? #8
В конструкторе выделяется динамически память для полей класса. А при создании объекта класса, в мейне, для него выделяется отдельная память.
stdafx.h да это заголовк для precompiled headers т.е тех хедеров который автоматом подключаются в проект.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.06.2013, 19:03     В чем ошибка программы? #9
Vahram1995, вот так перепишите:
C++
1
2
3
4
5
6
7
8
9
10
11
12
...
    if (stroka > 0 && stolbec > 0)
    {
      matrica konstruktor(stroka, stolbec);
      konstruktor.setmatr();
      konstruktor.printmatr();
    }
    else
    {
      cout << "Таблица не может быть отрицательным или равняться нулю !!!" << endl;
    }
...
Vahram1995
 Аватар для Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
04.06.2013, 19:25  [ТС]     В чем ошибка программы? #10
Цитата Сообщение от igor921 Посмотреть сообщение
В конструкторе выделяется динамически память для полей класса. А при создании объекта класса, в мейне, для него выделяется отдельная память.
То есть, когда в конструкторе выделяется динамическая память, нужно в маине выделить динамическую память с помощью конструктора?

Добавлено через 7 минут
???

Добавлено через 6 минут
Отлично объяснили ребята, только про выделение памяти не понял. Спасибо Вам.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 20:35     В чем ошибка программы?
Еще ссылки по теме:

Чем можно украсить графический интерфейс программы в C++? C++
Зацикливание программы. В чем ошибка? C++
В чем ошибка? C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.06.2013, 20:35     В чем ошибка программы? #11
Цитата Сообщение от Vahram1995 Посмотреть сообщение
То есть, когда в конструкторе выделяется динамическая память, нужно в маине выделить динамическую память с помощью конструктора?
Нет. Это просто один из вариантов создания объекта.
Yandex
Объявления
04.06.2013, 20:35     В чем ошибка программы?
Ответ Создать тему
Опции темы

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