Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
1

Работа с объектами внутри класса.

16.08.2009, 00:05. Просмотров 876. Ответов 9
Метки нет (Все метки)

Вот два класса подскажите что здесь не так.
Функция sh класса Engine должна вызвать функцию showhello класса Obj
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
 
class Engine
{
public:
    Engine(void);
public:
    Obj* iobj; 
public:
    ~Engine(void);
public:
    sh(void);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "StdAfx.h"
#include "Engine.h"
#include "Obj.h"
Engine::Engine(void)
{
    iobj=new Obj;
}
 
Engine::~Engine(void)
{
    delete iobj;
}
Engine::sh(void)
{
    iobj->showhello();
}
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
 
class Obj
{
public:
    Obj(void);
public:
    ~Obj(void);
public:
    showhello(void);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "StdAfx.h"
#include "Obj.h"
#include <iostream>
 
Obj::Obj(void)
{
}
 
Obj::~Obj(void)
{
}
Obj::showhello(void)
{
    std::cout << "hello world!" << std::endl;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.08.2009, 00:05
Ответы с готовыми решениями:

Работа с объектами класса: вывод на консоль, подсчет суммы
Здравствуйте, уважаемые программисты. Возникла проблема: 1) Не получается вывести на экран массив...

Работа с объектами класса Paint.picture
Здравствуйте, товарищи. Помогите разобраться с одной лотусной проблемой, возникшей на моем...

Работа с двумя объектами класса одновременно
Здравствуйте. Есть класс Цветы, у него два объекта: Роза и Тюльпан. Они имеют здоровье (health),...

Обработчик событий и работа с объектами класса object
Всем суток времени доброго! Помогите начинающему дубу в следующие проблеме, если вас не затруднит....

9
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
16.08.2009, 00:15 2
[QUOTE=Неумейка;241883]Вот два класса подскажите что здесь не так.
Функция sh класса Engine должна вызвать функцию showhello класса Obj
0. вот это перегружено директивой public:

C++
1
2
3
4
5
6
7
8
9
10
11
class Engine
{
public:
    Engine(void);
public:
    Obj* iobj; 
public:
    ~Engine(void);
public:
    sh(void);
};
лучше:

C++
1
2
3
4
5
6
7
8
class Engine
{
public:
    Engine(void);
    Obj* iobj; 
    ~Engine(void);
    sh(void);
};
ну и ф-ии по умолчанию возвращают, кажется int. поэтому вот это:
C++
1
sh(void);
еще сойдет, но тогда вот на это:

C++
1
2
3
4
Obj::showhello(void)
{
    std::cout << "hello world!" << std::endl;
}
компилятор должен бы выдать error: function Obj::showhello must return a value
1
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
16.08.2009, 00:45 3
чет не понял - в чем вопрос?
насколько я понимаю по нынешнему стандарту все функции, кроме деструкторов, конструкторов, должны иметь возвращаемый тип (без default-int) так, что определяй все с типом, если не выдает ошибки - возможно компилятор старый
0
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
16.08.2009, 01:07  [ТС] 4
Компилятор ругается на строку Obj* iobj;
Говорит:
1. missing ';' before '*'
2. missing type specifier - int assumed. Note: C++ does not support default-int
0
бжни
2467 / 1676 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
16.08.2009, 01:19 5
оо, я сперва не понял кто кому отвечает, вам novi4ok намекает же, что все функции должны быть объявлены с типом, а
C++
1
class Obj
должен быть объявлен раньше класса
C++
1
class Engine
1
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
16.08.2009, 01:29  [ТС] 6
добавил так заработало:
Class Obj;
Class Engine
{

Но почему!? Я ведь подключил хедер Obj к файлу Engine.cpp
0
14 / 14 / 2
Регистрация: 01.02.2009
Сообщений: 23
16.08.2009, 09:06 7
ты просто подключаешь раньше Enigine.h чем Obj.h
#include "Engine.h"
#include "Obj.h"


а надо наоборот
#include "Obj.h"
#include "Engine.h"
0
554 / 508 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
16.08.2009, 14:56 8
Цитата Сообщение от Неумейка Посмотреть сообщение
добавил так заработало:
Class Obj;
Class Engine
{

Но почему!? Я ведь подключил хедер Obj к файлу Engine.cpp
а переменную типа Obj пытаетесь объявить в хедере Engine, при декларации класса Engine, где компилятор еще не знает что такое Obj. а когда вы ему сказали перед объявлением, что
C++
1
Class Obj;
, он понял в чем дело. детали его на данном этапе не интересуют (в вашем контексте), они понадобятся в Engine.cpp, где уже нужно включить
C++
1
#include "Obj.h"
не советую включать без необходимости #include "*.h" в *.h-файлы: может получиться так, что два класса каждый содержит у себя в описании указатель на тип другого. и если вы включите хидеры, то это не скомпилируется. единственно правильный способ - это сделать как вы в вашем примере: сказать компилятору, что это класс, и поместить #include "*.h" в файл кода.
1
12 / 11 / 4
Регистрация: 14.02.2009
Сообщений: 89
16.08.2009, 16:22  [ТС] 9
Padonok, Это нечего не меняет. Порядок включения .h файлов не имеет значения.

novi4ok, спасибо, я по этому вопросу нашел пару строк в книге, по умному это называется “опережающие объявление”
0
14 / 14 / 2
Регистрация: 01.02.2009
Сообщений: 23
16.08.2009, 17:10 10
а да ошибся сорри
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.08.2009, 17:10

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Десериализация json в list<T>, работа с объектами класса
Всем здравствуйте! Помогите пожалуйста разобраться со следующей задачей: есть к примеру файл...

Как из другого класса управлять объектами класса Form1 ?
Добрый вечер, подскажите, пожалуйста. Создал форму Form1, создал отдельный класс (подписчик на одно...

Оптимизация работы метода класса с объектами класса [C++]
Здравствуйте! Я хочу сделать 25 000 объектов класса, в последствии они все будут разными, но...

Манипуляция объектами внутри блока svg
Скажите пожалуйста, создаю в illustratore объект, сохраняю его в svg. А как мне управлять...


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

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

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