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

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

Войти
Регистрация
Восстановить пароль
 
Неумейка
12 / 11 / 2
Регистрация: 14.02.2009
Сообщений: 89
#1

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

16.08.2009, 00:05. Просмотров 709. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2009, 00:05     Работа с объектами внутри класса.
Посмотрите здесь:

Оптимизация работы метода класса с объектами класса [C++] C++
Объявление дружественного класса внутри класса C++
Действия со всеми объектами класса C++
Не получается заполнить вектор объектами класса C++
C++ delete внутри класса для самого класса
Заполнение map объектами класса C++
Работа с объектами класса: вывод на консоль, подсчет суммы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
550 / 503 / 8
Регистрация: 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
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
16.08.2009, 00:45     Работа с объектами внутри класса. #3
чет не понял - в чем вопрос?
насколько я понимаю по нынешнему стандарту все функции, кроме деструкторов, конструкторов, должны иметь возвращаемый тип (без default-int) так, что определяй все с типом, если не выдает ошибки - возможно компилятор старый
Неумейка
12 / 11 / 2
Регистрация: 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
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
16.08.2009, 01:19     Работа с объектами внутри класса. #5
оо, я сперва не понял кто кому отвечает, вам novi4ok намекает же, что все функции должны быть объявлены с типом, а
C++
1
class Obj
должен быть объявлен раньше класса
C++
1
class Engine
Неумейка
12 / 11 / 2
Регистрация: 14.02.2009
Сообщений: 89
16.08.2009, 01:29  [ТС]     Работа с объектами внутри класса. #6
добавил так заработало:
Class Obj;
Class Engine
{

Но почему!? Я ведь подключил хедер Obj к файлу Engine.cpp
Padonok
14 / 14 / 1
Регистрация: 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"
novi4ok
550 / 503 / 8
Регистрация: 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" в файл кода.
Неумейка
12 / 11 / 2
Регистрация: 14.02.2009
Сообщений: 89
16.08.2009, 16:22  [ТС]     Работа с объектами внутри класса. #9
Padonok, Это нечего не меняет. Порядок включения .h файлов не имеет значения.

novi4ok, спасибо, я по этому вопросу нашел пару строк в книге, по умному это называется “опережающие объявление”
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2009, 17:10     Работа с объектами внутри класса.
Еще ссылки по теме:

C++ Сортировка массива с объектами класса
C++ Методы класса внутри определения класса
C++ Видимость экземпляра класса внутри класса
C++ Заполнение вектора класса внутри самого класса
C++ Реализация stl-ной queue с объектами своего класса, вылетает программа

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

Или воспользуйтесь поиском по форуму:
Padonok
14 / 14 / 1
Регистрация: 01.02.2009
Сообщений: 23
16.08.2009, 17:10     Работа с объектами внутри класса. #10
а да ошибся сорри
Yandex
Объявления
16.08.2009, 17:10     Работа с объектами внутри класса.
Ответ Создать тему
Опции темы

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