С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Natrix
5 / 5 / 0
Регистрация: 21.12.2009
Сообщений: 26
#1

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

22.05.2011, 22:45. Просмотров 1364. Ответов 11
Метки нет (Все метки)

Доброго всем дня.У меня возникла проблема с освоением языка 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
не обращайте внимание на то что бессмысленно вызываю конструктор и деструктор класса, это чисто тренировка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2011, 22:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с классами в С++ (C++):

Работа С Классами - C++
Привет Всем , Перехожу С делфи ))) Вот никак не пойму Вот Эту хрень в нутри класса Обрывок из струпа ...

Работа с классами - C++
Не знаю как правильно задать вопрос, поэтому приведу пример. У меня есть класс матрица как лучше реализовать операцию сложения матриц? Я...

работа с классами в С++ - C++
Пусть есть class.срр, в котором описан класс MyClass{ public: int i; ... } Есть файл main.cpp, в нем я использую...

Работа с классами - C++
Составить описание объектного типа TMatr, что обеспечивает размещение матрицы произвольного размера с возможностью изменения числа строк и...

работа с классами - C++
помогите пожалуйста написать программу на C++: Создать класс Complex для работы с комплексными числами,который должен содержать два...

Работа с классами - C++
Здравствуйте, я здесь первый раз, если что извините, за неккоректность, ввода или задания вопроса Я написал (например): class Figure...

11
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 функции которые будут их доставать.
1
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();
0
PointsEqual
ниначмуроФ
837 / 521 / 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 минуты
поменяйте классы местами и все заработает
1
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) и может привести к не полодкам в самой структуре таблице, но всеравно спасибо
0
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
22.05.2011, 23:07 #6
все я понял, сначало не углядел, извени. Но все равно функция int inputData() должна содержать rteturn, так же как и int run()
1
PointsEqual
ниначмуроФ
837 / 521 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.05.2011, 23:07 #7
а кто тут наследуется?
1
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"

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

вы уж извините глупый я ещё в ООП
0
PointsEqual
ниначмуроФ
837 / 521 / 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 - нужно было еще определить конструктор и деструктор
1
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 , это в каждом классе нужно прописывать то что он возвращает? тоесть, возвращать сами функции которые вызываются?
0
PointsEqual
ниначмуроФ
837 / 521 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
22.05.2011, 23:37 #11
тут функции ничего не возвращают, поменяйте int На void
0
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;
}
Так все работает
0
23.05.2011, 00:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2011, 00:30
Привет! Вот еще темы с ответами:

Работа с классами - C++
Здравствуйте. Есть код, компиляция происходит нормально, Dev-C++ не выдаёт никаких ошибок. Но когда запускаю программу и начиная там...

Работа с классами - C++
Здравствуйте! Вот у меня есть класс Team team.h#pragma once #include &lt;string&gt; using namespace std; class Team{ public: ...

Работа с классами - C++
Привет!!! Есть задачка: &quot;Определите класс Oper, содержащий идентификатор типа ld (string или C-строка) и операцию (указатель на...

Работа с классами - C++
Почему может вывестись здесь ошибка? #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;math.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.