#include "class1.h"
class class2
{
private:
class1 a; //тут он и не знает что есть такой тип
};
инициализация типа-класс, объект которого принадлежит другому классу
народ, слушайте что-то ерундей какая-то получилась...есть два класса..объявлены в разных файлах (2*.H и 2*.CPP)...в одном есть член - объект другого класса....так вот вопрос в том что через раз компилятор ругается на имя класса и не хочет компилить...файл .H нужного класса подключен...как понимаю тут что-то с проблемой инициализации классов..и иногда получается что при инициализации класс не знает что есть ваще такой тип...какое решение предложите?
пишу вот так
Код:
Слишком мало информации.
Код:
#ifndef _OClass_H_
#define _OClass_H_
class OClass
{
private:
HDC hDC;
public:
OClass(void);
~OClass(void);
};
#endif
#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;
};
#include "OClass.h"
class Class2
{
public:
Class2(void);
~Class2(void);
private:
OClass element; /*вот тут ругается...хочет точку с запятой перед element , т.е не узнает что OClass это тип*/
HWND hWndMain;
};
и что интересно через раз. т.е. реально када откомпилет сначала OClass.h, тада все работает
"
class Class2
{
"
на
"
class OClass;
class Class2
{
"
должно помочь
error C2079: 'Сlass2::element' uses undefined class 'OClass'
А это композицией называется, когда полем класса является экземпляр другого класса?
Цитата: artemkaint
есть один файл OClass.h
и второй Class2.h
и что интересно через раз. т.е. реально када откомпилет сначала OClass.h, тада все работает
Код:
#ifndef _OClass_H_
#define _OClass_H_
class OClass
{
private:
HDC hDC;
public:
OClass(void);
~OClass(void);
};
#endif
#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;
};
#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".
точно!! про прекомпиляцию я совсем и забыл..я привык что она обычно включена, а она оказалась отключенной..:( сапасибо)