Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

инициализация типа-класс, объект которого принадлежит другому классу

6.8K
21 июня 2007 года
artemkaint
60 / / 12.07.2006
Hello..
народ, слушайте что-то ерундей какая-то получилась...есть два класса..объявлены в разных файлах (2*.H и 2*.CPP)...в одном есть член - объект другого класса....так вот вопрос в том что через раз компилятор ругается на имя класса и не хочет компилить...файл .H нужного класса подключен...как понимаю тут что-то с проблемой инициализации классов..и иногда получается что при инициализации класс не знает что есть ваще такой тип...какое решение предложите?

пишу вот так

 
Код:
#include "class1.h"
class class2
{
private:
     class1 a; //тут он и не знает что есть такой тип
};
3
21 июня 2007 года
Green
4.8K / / 20.01.2000
Слишком мало информации.
6.8K
21 июня 2007 года
artemkaint
60 / / 12.07.2006
есть один файл OClass.h

Код:
#ifndef _OClass_H_
#define _OClass_H_

class OClass
{
private:
    HDC hDC;
public:
    OClass(void);
    ~OClass(void);
};

#endif


и второй Class2.h
Код:
#pragma once
#include "OClass.h"

class Class2
{
public:
    Class2(void);
    ~Class2(void);
private:
    OClass element; /*вот тут ругается...хочет точку с запятой перед element , т.е не узнает что OClass это тип*/
    HWND hWndMain;
};


и что интересно через раз. т.е. реально када откомпилет сначала OClass.h, тада все работает
29K
22 июня 2007 года
Sergio_Bear
5 / / 21.06.2007
Попробуй заменить

"
class Class2
{
"

на
"
class OClass;

class Class2
{
"
должно помочь
6.8K
22 июня 2007 года
artemkaint
60 / / 12.07.2006
не а пробовал - пишет
error C2079: 'Сlass2::element' uses undefined class 'OClass'
14K
22 июня 2007 года
Mr. White
25 / / 17.09.2006
А это композицией называется, когда полем класса является экземпляр другого класса?
350
22 июня 2007 года
cheburator
589 / / 01.06.2006
Цитата: artemkaint
есть один файл OClass.h

Код:
#ifndef _OClass_H_
#define _OClass_H_

class OClass
{
private:
    HDC hDC;
public:
    OClass(void);
    ~OClass(void);
};

#endif


и второй Class2.h
Код:
#pragma once
#include "OClass.h"

class Class2
{
public:
    Class2(void);
    ~Class2(void);
private:
    OClass element; /*вот тут ругается...хочет точку с запятой перед element , т.е не узнает что OClass это тип*/
    HWND hWndMain;
};


и что интересно через раз. т.е. реально када откомпилет сначала OClass.h, тада все работает



В MS VC++ можно попробовать выключить использование Precompiled headers. Правой кнопкой на проект, "Properties", выбрать нужный Configuration (лучше - "All Configurations"), затем ветвь "Configuration properties", "C/C++", "Precompiled headers", в поле "Create/use precompiled header" выбираем "Not using precompiled headers".

6.8K
22 июня 2007 года
artemkaint
60 / / 12.07.2006
точно!! про прекомпиляцию я совсем и забыл..я привык что она обычно включена, а она оказалась отключенной..:( сапасибо)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог