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

Не компилирует - C++

Восстановить пароль Регистрация
 
razum777
0 / 0 / 0
Регистрация: 15.12.2009
Сообщений: 46
03.06.2013, 21:09     Не компилирует #1
Доброго времени суток!
Не могу понять в чем проблема, точь в точь такой же код, корректно компилируется, прога запускается. А вот этот код - нет, выдает кучу ошибок: не объявлен идентификатор 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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2013, 21:09     Не компилирует
Посмотрите здесь:

C++ Не компилирует
Dev C++ не компилирует C++
Не компилирует... C++
C++ Не компилирует
C++ Не компилирует
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
drdrink
39 / 39 / 1
Регистрация: 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" потому что это пользовательский класс а не стандартный вроде бы всё попробуй изменить и напиши что получиться
razum777
0 / 0 / 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"
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
03.06.2013, 21:36     Не компилирует #4
razum777, на вскидку: нужна точка с запятой после объявления класса\структуры:
C++
1
2
3
class times {
   // ...
};
после определения функций\методов точка с запятой не нужна:
C++
1
2
3
times::times() {
   // ...
}
drdrink
39 / 39 / 1
Регистрация: 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() определи лучше в классе
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
03.06.2013, 21:47     Не компилирует #6
Цитата Сообщение от drdrink Посмотреть сообщение
функцию make_times() определи лучше в классе
Зачем?
razum777
0 / 0 / 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
Для продолжения нажмите любую клавишу . . .

Что в данном случае делать?
drdrink
39 / 39 / 1
Регистрация: 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 зачем определять как поля твоего класса???
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
03.06.2013, 21:56     Не компилирует #9
Цитата Сообщение от drdrink Посмотреть сообщение
а оператора = нет и конструктора копирования для return тоже нету!!!!
Компилятор сам сгенерирует.
drdrink
39 / 39 / 1
Регистрация: 13.05.2013
Сообщений: 103
03.06.2013, 21:57     Не компилирует #10
gray_fox, ну вот он и неведомые числа генерирует
razum777
0 / 0 / 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;
};
 
};
Исправил вот так, работает, это правильное решение?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
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, ну вот он и неведомые числа генерирует
Конструкторы и операторы тут не причём, автоматически сгенерированные здесь вполне подойдут - они просто копируют данные объекта.
razum777
0 / 0 / 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?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
03.06.2013, 22:12     Не компилирует #14
Цитата Сообщение от razum777 Посмотреть сообщение
где это лучше реализовать? В функции make_times?
Можно прямо в конструкторе проверять: если знаете, что такое исключения - используйте их, так обычно проще.
razum777
0 / 0 / 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
Для продолжения нажмите любую клавишу . . .
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
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);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2013, 23:26     Не компилирует
Еще ссылки по теме:

g++/gcc не компилирует C++
Turbo не компилирует C++

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

Или воспользуйтесь поиском по форуму:
razum777
0 / 0 / 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");
};
Yandex
Объявления
03.06.2013, 23:26     Не компилирует
Ответ Создать тему
Опции темы

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