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

Работа с классами в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Natrix
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 22:45     Работа с классами в С++ #1
Доброго всем дня.У меня возникла проблема с освоением языка C++ , сейчас пишу курсовую на этом языке, и ещё не совсем всё понимаю, но книги читаю. В основном "Кериганн и Ричи Философия С и С++"
При составлении простой программы. где в функции main идёт обращение к классу, после чего тот класс обращаеть к другому, я получил ошибки такого типа :
1) class.h:9: error: `StartData' does not name a type

2) class.h:7: error: `startData' undeclared (first use this function)

и предупреждение

3)class.h:7: warning: no return statement in function returning non-void

Помогите пожалуйста понять в чём состоит ошибка, уже второй день за голову хватаюсь не могу сдвинуться с мёртвой точки. Вот сам код:

файл main.cpp

C++
1
2
3
4
5
6
7
#include <iostream>
#include "class.h"
 
int main() {    
        FlyBullet flybullet;
        return flybullet.run();
}
и файл class.h
Код C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
using namespace std;
 
class FlyBullet { 
public:
        FlyBullet();
        ~FlyBullet();
        int run() { startData.inputData(); }
private:
        StartData startData;
};
 
class Object { };
 
class StartData {
public:
        int inputData() { inputSpeed(); inputAngle(); inputWind(); }
private:
        void inputSpeed() { cout << "enter speed: "; cin >> startSpeed; }
        void inputWind() { cout << "enter wind speed: "; cin >> windSpeed; }
        void inputAngle() { cout << "enter angle: "; cin >> startAngle; }
        int startSpeed,windSpeed,startAngle;
};
P.S
не обращайте внимание на то что бессмысленно вызываю конструктор и деструктор класса, это чисто тренировка.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2011, 22:45     Работа с классами в С++
Посмотрите здесь:

работа с классами C++
Работа с классами C++
C++ Работа с классами.
C++ Работа с классами
C++ Работа с классами
C++ Работа с классами
Работа С Классами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
22.05.2011, 22:54     Работа с классами в С++ #2
C++
1
2
3
4
int main() {    
        FlyBullet flybullet;
        return flybullet.run();
}
Функция мэйн это основное тело программы, несмотря на то что она int, возвращает main всегда 0

C++
1
return 0;
А вот функция класс StartData, int inputData() - должна, просто обязана выдавать значение типа int
Так же функция класса FlyBullet, int run() должна выдать значение int

Зачем ты сделал функции inputSpeed(); inputAngle(); inputWind(); private если нет методов их вызвать?
Тут одно из двух, либо делай их public, либо пиши public функции которые будут их доставать.
Natrix
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 22:56  [ТС]     Работа с классами в С++ #3
Цитата Сообщение от vlad_ltd Посмотреть сообщение
int main() { FlyBullet flybullet; return flybullet.run(); }
То что возвращает она 0, это ясно, но я тут хотел вызвать класс с функцией run();
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.05.2011, 23:01     Работа с классами в С++ #4
Цитата Сообщение от Natrix Посмотреть сообщение
3)class.h:7: warning: no return statement in function returning non-void
скорее всего потомучто функция должна возвращать int а ничего не возвращает



Добавлено через 26 секунд
Цитата Сообщение от vlad_ltd Посмотреть сообщение
Функция мэйн это основное тело программы, несмотря на то что она int, возвращает main всегда 0
не всегда

Добавлено через 3 минуты
поменяйте классы местами и все заработает
Natrix
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 23:05  [ТС]     Работа с классами в С++ #5
Цитата Сообщение от vlad_ltd Посмотреть сообщение
А вот функция класс StartData, int inputData() - должна, просто обязана выдавать значение типа int
так она это и делает, ведь в функции int inputData() все функции и передают int;

Добавлено через 2 минуты
Цитата Сообщение от PointsEqual Посмотреть сообщение
поменяйте классы местами и все заработает
я сейчас обязательно это пробую сделать, спасибо за помощь, но этот маленький кусочек программы построен по Иерархии наследования (UML) и может привести к не полодкам в самой структуре таблице, но всеравно спасибо
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
22.05.2011, 23:07     Работа с классами в С++ #6
все я понял, сначало не углядел, извени. Но все равно функция int inputData() должна содержать rteturn, так же как и int run()
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.05.2011, 23:07     Работа с классами в С++ #7
а кто тут наследуется?
Natrix
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 23:16  [ТС]     Работа с классами в С++ #8
Цитата Сообщение от vlad_ltd Посмотреть сообщение
Зачем ты сделал функции inputSpeed(); inputAngle(); inputWind(); private если нет методов их вызвать?
Тут одно из двух, либо делай их public, либо пиши public функции которые будут их доставать.
это метод инкапсуляции, только класс StarData может использовать их, и никто другой

Добавлено через 1 минуту
а вызывает их именно int inputData() где саму эту функцию вызывает run()

Добавлено через 1 минуту
Цитата Сообщение от PointsEqual Посмотреть сообщение
а кто тут наследуется?
не корректно понял вопрос, наследований тут нет

Добавлено через 5 минут
Цитата Сообщение от vlad_ltd Посмотреть сообщение
Но все равно функция int inputData() должна содержать rteturn, так же как и int run()
попробывал написать в классе
C++
1
return startSpeed,windSpeed,startAngle;
и в итоге получил следующию ошибку

class.h:11: error: expected unqualified-id before "return"

возможно правильней написать чтоб саму функцию возвращало?

вы уж извините глупый я ещё в ООП
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.05.2011, 23:19     Работа с классами в С++ #9
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
#include <iostream>
 
using namespace std;
 
 
 
 
 
class Object { };
 
class StartData {
public:
        int inputData() { inputSpeed(); inputAngle(); inputWind(); }
private:
        void inputSpeed() { cout << "enter speed: "; cin >> startSpeed; }
        void inputWind() { cout << "enter wind speed: "; cin >> windSpeed; }
        void inputAngle() { cout << "enter angle: "; cin >> startAngle; }
        int startSpeed,windSpeed,startAngle;
};
 
 
class FlyBullet {
public:
        FlyBullet(){};
        ~FlyBullet(){};
        int run() { startData.inputData(); }
private:
        StartData startData;
};
 
 
int main()
{
            FlyBullet flybullet;
        return flybullet.run();
    return 0;
}
class FlyBullet - нужно было еще определить конструктор и деструктор
Natrix
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 23:24  [ТС]     Работа с классами в С++ #10
Цитата Сообщение от PointsEqual Посмотреть сообщение
class FlyBullet - нужно было еще определить конструктор и деструктор
спасибо большое)) теперь ясно почему он ругался)

но меня настраживает 4 ошибки одного типа, no return statement in function returning non-void , это в каждом классе нужно прописывать то что он возвращает? тоесть, возвращать сами функции которые вызываются?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
833 / 517 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.05.2011, 23:37     Работа с классами в С++ #11
тут функции ничего не возвращают, поменяйте int На void
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2011, 00:30     Работа с классами в С++
Еще ссылки по теме:

Работа с классами C++
Работа с классами C++
Работа с классами C++
C++ Работа с классами
C++ Работа с классами

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

Или воспользуйтесь поиском по форуму:
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
23.05.2011, 00:30     Работа с классами в С++ #12
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
#include <iostream>
 
using namespace std;
class Object { };
class StartData {
public:
    StartData(){}
        void inputData() {inputSpeed(); inputAngle(); inputWind(); }
private:
        void inputSpeed() { cout << "enter speed: "; cin >> startSpeed; }
        void inputWind() { cout << "enter wind speed: "; cin >> windSpeed; }
        void inputAngle() { cout << "enter angle: "; cin >> startAngle; }
        int startSpeed,windSpeed,startAngle;
};
 
 
class FlyBullet {
public:
        FlyBullet(){};
        ~FlyBullet(){};
        void run() { startData.inputData(); }
private:
        StartData startData;
};
 
 
int main()
{
       FlyBullet flybullet;
       flybullet.run();
    return 0;
}
Так все работает
Yandex
Объявления
23.05.2011, 00:30     Работа с классами в С++
Ответ Создать тему
Опции темы

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