5 / 5 / 1
Регистрация: 21.12.2009
Сообщений: 26
1

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

22.05.2011, 22:45. Показов 2441. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2011, 22:45
Ответы с готовыми решениями:

Работа с классами
Есть два класса визуально готовы как на картинке. Нужно написать третий который проверяет такие...

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

Работа с классами
Подскажите, создал класс class Person { private: ... public: static int count;

Работа с классами
Задача:найти сумму всех отрицательных элементов матрицы и записать в вектор. For (i=0;i&lt;=N;i++)...

11
3 / 3 / 1
Регистрация: 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
5 / 5 / 1
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 22:56  [ТС] 3
Цитата Сообщение от vlad_ltd Посмотреть сообщение
int main() { FlyBullet flybullet; return flybullet.run(); }
То что возвращает она 0, это ясно, но я тут хотел вызвать класс с функцией run();
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
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
5 / 5 / 1
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 23:05  [ТС] 5
Цитата Сообщение от vlad_ltd Посмотреть сообщение
А вот функция класс StartData, int inputData() - должна, просто обязана выдавать значение типа int
так она это и делает, ведь в функции int inputData() все функции и передают int;

Добавлено через 2 минуты
Цитата Сообщение от PointsEqual Посмотреть сообщение
поменяйте классы местами и все заработает
я сейчас обязательно это пробую сделать, спасибо за помощь, но этот маленький кусочек программы построен по Иерархии наследования (UML) и может привести к не полодкам в самой структуре таблице, но всеравно спасибо
0
3 / 3 / 1
Регистрация: 30.04.2011
Сообщений: 51
22.05.2011, 23:07 6
все я понял, сначало не углядел, извени. Но все равно функция int inputData() должна содержать rteturn, так же как и int run()
1
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
22.05.2011, 23:07 7
а кто тут наследуется?
1
5 / 5 / 1
Регистрация: 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
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
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
5 / 5 / 1
Регистрация: 21.12.2009
Сообщений: 26
22.05.2011, 23:24  [ТС] 10
Цитата Сообщение от PointsEqual Посмотреть сообщение
class FlyBullet - нужно было еще определить конструктор и деструктор
спасибо большое)) теперь ясно почему он ругался)

но меня настраживает 4 ошибки одного типа, no return statement in function returning non-void , это в каждом классе нужно прописывать то что он возвращает? тоесть, возвращать сами функции которые вызываются?
0
ниначмуроФ
851 / 535 / 110
Регистрация: 12.10.2009
Сообщений: 1,913
22.05.2011, 23:37 11
тут функции ничего не возвращают, поменяйте int На void
0
3 / 3 / 1
Регистрация: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2011, 00:30
Помогаю со студенческими работами здесь

Работа с классами
Добрый день, на днях наткнулся на одну статью про работу с классами и не совсем ее понял, может...

Работа с классами
Добавьте два класса Person и Staff - (это сделал, работает). Создайте два класса Teacher и...

Работа с классами
Имеется код: public function getCourses($c){ foreach($c as $key=&gt; $value){...

Работа с классами
Нам задали по программированию задание (во вложении Лабораторная работа 1_2) Решение ЛР3 и ЛР4...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru