Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 15.12.2009
Сообщений: 46
1

Не компилирует

03.06.2013, 21:09. Показов 1092. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Не могу понять в чем проблема, точь в точь такой же код, корректно компилируется, прога запускается. А вот этот код - нет, выдает кучу ошибок: не объявлен идентификатор minuta, u, A и т.д. Этот код отличается от предыдущего тем, что там он называется student а здесь Time... и у меня просто в голову не укладывается, почему. Помогите, пожалуйста.

Time.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
using namespace std;
int minuta;
int secunda;
 
class times
{ 
public:
    times();
    times(int M, int S);
            void show();
}

Time.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <Time.h>
using namespace std;
 
times::times()
{};
 
times::times(int M, int S)
{ minuta=M;
secunda=S;
};
 
void times::show()
{ cout<<"\n"<<minuta<<" : "<<secunda;
}

13lab3main.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>
#include <Time.h>
#include <Windows.h>
 
using namespace std;
 
 
times make_times()
{int a,b;
    cout<<"Введите минуты: ";
cin>>a;
cout<<"   ";
cin>>b;
times u(a,b);
return u;
}
 
void main()
{SetConsoleCP(1251); 
        SetConsoleOutputCP(1251);
        times A;
        
        A=make_times();
        A.show();
        cout<<"\n";
system ("PAUSE");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2013, 21:09
Ответы с готовыми решениями:

Не компилирует...
Здравствуйте, столкнулся с такой проблемой... Вообщем когда дома пишу программу, дома - работает....

Не компилирует
Здравствуйте ув. Пользователи. Ответьте пожалуйста на мой нубский вопрос. Microsoft Visual C++ 2010...

Не компилирует
Здравствуйте! Написал программу в консоли на С++ уже 2 раза но все та же ошибка - code has no...

Не компилирует
Помогите не компилирует MinGW и devC++ пишет не отвечает и всё(((

16
39 / 39 / 24
Регистрация: 13.05.2013
Сообщений: 103
03.06.2013, 21:17 2
во первых minuta и secunda надо объявит в классе

C++
1
2
3
4
5
6
class times
{
    int minuta;
    int secunda;
    .......
}
и в файлах Time.cpp и в 13lab3main.cpp надо подключать не так #include <Time.h>, а #include "Time.h" потому что это пользовательский класс а не стандартный вроде бы всё попробуй изменить и напиши что получиться
1
1 / 1 / 0
Регистрация: 15.12.2009
Сообщений: 46
03.06.2013, 21:33  [ТС] 3
Цитата Сообщение от drdrink Посмотреть сообщение
во первых minuta и secunda надо объявит в классе

C++
1
2
3
4
5
6
class times
{
    int minuta;
    int secunda;
    .......
}
и в файлах Time.cpp и в 13lab3main.cpp надо подключать не так #include <Time.h>, а #include "Time.h" потому что это пользовательский класс а не стандартный вроде бы всё попробуй изменить и напиши что получиться
Да, спасибо, по поводу объявление переменных была допущена ошибка и по поводу подключения своего заголовочного файла, просто видимо мозг плавится не заметил таких элементарных ошибок. Но все таки он мне выдает кучу ошибок, вот например:
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\excpt.h(29): error C2143: синтаксическая ошибка: отсутствие ";" перед "строка"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\excpt.h(29): error C2059: синтаксическая ошибка: строка
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\excpt.h(29): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\excpt.h(29): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\winnt.h(1204): error C2143: синтаксическая ошибка: отсутствие ";" перед "__stdcall"
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
03.06.2013, 21:36 4
razum777, на вскидку: нужна точка с запятой после объявления класса\структуры:
C++
1
2
3
class times {
   // ...
};
после определения функций\методов точка с запятой не нужна:
C++
1
2
3
times::times() {
   // ...
}
0
39 / 39 / 24
Регистрация: 13.05.2013
Сообщений: 103
03.06.2013, 21:41 5
Цитата Сообщение от gray_fox Посмотреть сообщение
razum777, на вскидку: нужна точка с запятой после объявления класса\структуры:
C++
1
2
3
class times {
   // ...
};
после определения функций\методов точка с запятой не нужна:
C++
1
2
3
times::times() {
   // ...
}
да переделай это и функцию make_times() определи лучше в классе
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
03.06.2013, 21:47 6
Цитата Сообщение от drdrink Посмотреть сообщение
функцию make_times() определи лучше в классе
Зачем?
0
1 / 1 / 0
Регистрация: 15.12.2009
Сообщений: 46
03.06.2013, 21:53  [ТС] 7
Цитата Сообщение от drdrink Посмотреть сообщение
да переделай это и функцию make_times() определи лучше в классе
Да, действительно, заработало, по поводу запихать функцию в класс, сделал так:
Time.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
 
class time
{ int a,b;
    int minuta;
int secunda;
public:
    time();
    time(int M, int S);
            void show();
    time make_time()
    {   cout<<"Введите минуты: ";
cin>>a;
cout<<"Введите секунды ";
cin>>b;
time u(a,b);
return u;
};
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "Time.h"
#include <Windows.h>
 
using namespace std;
 
 
 
void main()
{SetConsoleCP(1251); 
        SetConsoleOutputCP(1251);
        time A;
        A.make_time();
        A.show();
        cout<<"\n";
system ("PAUSE");
};
НО, если функция вне класса, то на экран выводит не то, что с нее ввел, например
Введите минуты: 25
Введите секунды 25

-858993460 : -858993460
Для продолжения нажмите любую клавишу . . .

Что в данном случае делать?
0
39 / 39 / 24
Регистрация: 13.05.2013
Сообщений: 103
03.06.2013, 21:56 8
и вообще как програма будет работать ведь ты делаешь так A = make_times(...), а оператора = нет и конструктора копирования для return тоже нету!!!!

Добавлено через 1 минуту
Цитата Сообщение от razum777 Посмотреть сообщение
Да, действительно, заработало, по поводу запихать функцию в класс, сделал так:
Time.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
using namespace std;
 
 
class time
{ int a,b;
    int minuta;
int secunda;
public:
    time();
    time(int M, int S);
            void show();
    time make_time()
    {   cout<<"Введите минуты: ";
cin>>a;
cout<<"Введите секунды ";
cin>>b;
time u(a,b);
return u;
};
 
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include "Time.h"
#include <Windows.h>
 
using namespace std;
 
 
 
void main()
{SetConsoleCP(1251); 
        SetConsoleOutputCP(1251);
        time A;
        A.make_time();
        A.show();
        cout<<"\n";
system ("PAUSE");
};
НО, если функция вне класса, то на экран выводит не то, что с нее ввел, например
Введите минуты: 25
Введите секунды 25

-858993460 : -858993460
Для продолжения нажмите любую клавишу . . .

Что в данном случае делать?
а a и b зачем определять как поля твоего класса???
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
03.06.2013, 21:56 9
Цитата Сообщение от drdrink Посмотреть сообщение
а оператора = нет и конструктора копирования для return тоже нету!!!!
Компилятор сам сгенерирует.
0
39 / 39 / 24
Регистрация: 13.05.2013
Сообщений: 103
03.06.2013, 21:57 10
gray_fox, ну вот он и неведомые числа генерирует
0
1 / 1 / 0
Регистрация: 15.12.2009
Сообщений: 46
03.06.2013, 22:01  [ТС] 11
Цитата Сообщение от gray_fox Посмотреть сообщение
Компилятор сам сгенерирует.
Не обессудьте, но читал голую теорию в учебнике и там написано, что конструктор копирования создается автоматически, тем более использую VS 2010, можете поправить код?

Добавлено через 2 минуты
Цитата Сообщение от razum777 Посмотреть сообщение
Не обессудьте, но читал голую теорию в учебнике и там написано, что конструктор копирования создается автоматически, тем более использую VS 2010, можете поправить код?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
 
class time
{   int minuta;
int secunda;
public:
    time();
    time(int M, int S);
            void show();
    time make_time()
    {   cout<<"Введите минуты: ";
cin>>minuta;
cout<<"Введите секунды ";
cin>>secunda;
time u(minuta,secunda);
return u;
};
 
};
Исправил вот так, работает, это правильное решение?
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
03.06.2013, 22:10 12
razum777, как я понял что нужно (в одном файле):
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
#include <iostream>
 
 
using namespace std;
 
 
class times { 
 
public:
    times();
    times(int M, int S);
 
    void show() const;
 
 
private:
   int minutes;
   int seconds;
};
 
times::times() : minutes(0), seconds(0) {}
 
times::times(int M, int S) : minutes(M), seconds(S) {}
 
void times::show() const {
   cout<< endl << minutes<< " : " <<seconds;
}
 
times make_times() {
   int a, b;
 
   cout << "Введите минуты: ";
   cin >> a;
 
   cout << "Введите секунды: ";
   cin >> b;
 
   return times(a, b);
}
 
 
int main() {
    // приблуды для локализации
 
    times A = make_times();
    A.show();
}
http://ideone.com/DcwKt1

Добавлено через 1 минуту
Цитата Сообщение от razum777 Посмотреть сообщение
Не обессудьте, но читал голую теорию в учебнике и там написано, что конструктор копирования создается автоматически, тем более использую VS 2010, можете поправить код?
Я про это и писал.

Добавлено через 46 секунд
Но если не уверены, можно всегда написать самому.

Добавлено через 3 минуты
Цитата Сообщение от drdrink Посмотреть сообщение
gray_fox, ну вот он и неведомые числа генерирует
Конструкторы и операторы тут не причём, автоматически сгенерированные здесь вполне подойдут - они просто копируют данные объекта.
1
1 / 1 / 0
Регистрация: 15.12.2009
Сообщений: 46
03.06.2013, 22:10  [ТС] 13
Цитата Сообщение от gray_fox Посмотреть сообщение
razum777, как я понял что нужно (в одном файле):
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
#include <iostream>
 
 
using namespace std;
 
 
class times { 
 
public:
    times();
    times(int M, int S);
 
    void show() const;
 
 
private:
   int minutes;
   int seconds;
};
 
times::times() : minutes(0), seconds(0) {}
 
times::times(int M, int S) : minutes(M), seconds(S) {}
 
void times::show() const {
   cout<< endl << minutes<< " : " <<seconds;
}
 
times make_times() {
   int a, b;
 
   cout << "Введите минуты: ";
   cin >> a;
 
   cout << "Введите секунды: ";
   cin >> b;
 
   return times(a, b);
}
 
 
int main() {
    // приблуды для локализации
 
    times A = make_times();
    A.show();
}
http://ideone.com/DcwKt1

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

Я про это и писал.

Добавлено через 46 секунд
Но если не уверены, можно всегда написать самому.
Огромное спасибо! У меня теперь появилось понимание
Друзья, еще вопрос, теперь нужно чтобы программа показывало сообщение о том, что в минуте не может быть больше 60 сек, и в сутках не больше 24 часов, где это лучше реализовать? В функции make_times?
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
03.06.2013, 22:12 14
Цитата Сообщение от razum777 Посмотреть сообщение
где это лучше реализовать? В функции make_times?
Можно прямо в конструкторе проверять: если знаете, что такое исключения - используйте их, так обычно проще.
0
1 / 1 / 0
Регистрация: 15.12.2009
Сообщений: 46
03.06.2013, 22:45  [ТС] 15
Цитата Сообщение от gray_fox Посмотреть сообщение
Можно прямо в конструкторе проверять: если знаете, что такое исключения - используйте их, так обычно проще.
Прочитал про исключения, что-то не совсем понял логику, можете разъяснить?
Time.h
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>
 
using namespace std;
 
 
class time
{   int minuta;
int secunda;
public:
    time();
    time(int M, int S);
            void show();
    time make_time()
{   try
    {throw
    minuta=60;}
    catch (int minuta)
    {cout<<"\nВведите минуты: ";
        cin>>minuta;
    }
cout<<"\nВведите секунды ";
cin>>secunda;
time u(minuta,secunda);
return u;
};
 
};

После этого, когда вводишь любое значение минут, на экран выводит 60:

Введите минуты: 75

Введите секунды 75

60 : 75
Введите минуты: 120

Введите секунды 36

60 : 36
Для продолжения нажмите любую клавишу . . .
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
03.06.2013, 23:02 16
Цитата Сообщение от razum777 Посмотреть сообщение
Прочитал про исключения, что-то не совсем понял логику, можете разъяснить?
Как то не так, видимо, прочитали) Так, если не разобрались, проще будет их пока не касаться, обрабатывать ошибки с помощью возврата кода ошибки, либо сразу на месте выводить сообщение об ошибке и завершать работу программы (по мне самый простой и понятный вариант в данном случае). Например (так удобнее всё будет делать в ф-ии make_times, а не в конструкторе):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#inbclude <cstdlib>
 
// ...
 
times make_times() {
   int a, b;
 
   cout << "Введите минуты: ";
   cin >> a;
   if ((a < 0) || (a >= 60)) {
      cerr << "Минуты должны быть в диапозоне [0;60)" << endl;
      exit(EXIT_FAILURE);
   }
 
   cout << "Введите секунды [0;60): ";
   cin >> b;
   if ((b < 0) || (b >= 60)) {
      cerr << "Секунды должны быть в диапозоне [0;60)" << endl;
      exit(EXIT_FAILURE);
   }
 
   return times(a, b);
}
0
1 / 1 / 0
Регистрация: 15.12.2009
Сообщений: 46
03.06.2013, 23:26  [ТС] 17
Цитата Сообщение от gray_fox Посмотреть сообщение
Как то не так, видимо, прочитали) Так, если не разобрались, проще будет их пока не касаться, обрабатывать ошибки с помощью возврата кода ошибки, либо сразу на месте выводить сообщение об ошибке и завершать работу программы (по мне самый простой и понятный вариант в данном случае). Например (так удобнее всё будет делать в ф-ии make_times, а не в конструкторе):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#inbclude <cstdlib>
 
// ...
 
times make_times() {
   int a, b;
 
   cout << "Введите минуты: ";
   cin >> a;
   if ((a < 0) || (a >= 60)) {
      cerr << "Минуты должны быть в диапозоне [0;60)" << endl;
      exit(EXIT_FAILURE);
   }
 
   cout << "Введите секунды [0;60): ";
   cin >> b;
   if ((b < 0) || (b >= 60)) {
      cerr << "Секунды должны быть в диапозоне [0;60)" << endl;
      exit(EXIT_FAILURE);
   }
 
   return times(a, b);
}
Ладно, исключение на потом, действительно, я сделал так, может кому пригодится, но Вам тоже спасибо большое.
Time.h
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>
 
using namespace std;
 
 
class time
{   int minuta;
int secunda;
public:
    time();
    time(int M, int S);
    void show();            
 time make_time()
{cout<<"\nВведите минуты: ";
cin>>minuta;
while ((minuta>=60)||(minuta<0))
{cout<<"\nВведите еще раз, минуты должны быть в диапозоне (0:60) ";
cin>>minuta;}
cout<<"\nВведите секунды ";
cin>>secunda;
while ((secunda>=60)||(secunda<0))  
{cout<<"\nВведите еще раз, секунды должны быть в диапозоне (0:60) ";
cin>>secunda;}
time u(minuta,secunda);
return u;
};
};
Добавлено через 6 минут
Еще 1 момент, как сделать сравнение двух временных интервалов?
На данный момент у меня:

Введите минуты: 125

Введите еще раз, минуты должны быть в диапазоне (0:60) 59

Введите секунды 58

59 : 58
Введите минуты: -125

Введите еще раз, минуты должны быть в диапазоне (0:60) 25

Введите секунды 65

Введите еще раз, секунды должны быть в диапазоне (0:60) 55

25 : 55
Для продолжения нажмите любую клавишу . . .


Как сравнить результаты перегруженной функции?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Вот осн. код программы:
#include <iostream>
#include "Time.h"
#include <Windows.h>
 
using namespace std;
 
void main()
{   SetConsoleCP(1251); 
        SetConsoleOutputCP(1251);
        time A;
        time B;
        A.make_time();
        A.show();
        B.make_time();
        B.show();
        cout<<"\n";
        system ("PAUSE");
};
0
03.06.2013, 23:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2013, 23:26
Помогаю со студенческими работами здесь

Dev C++ не компилирует
dev c++ не компилирует Пишет такую ошибку:...

g++/gcc не компилирует
есть С++ код #include &lt;iostream&gt; int main(){ std::cout &lt;&lt; &quot;hello ,world!&quot;; } ...

Не компилирует DEV C++
Не компилирует DevC++. Пытался побывать на коде вашего тетриса - таже проблема. Что я делаю не...

Turbo не компилирует
Все подключил и указал путь. Но все же не компилирует и ругается на это


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

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