Здравствуйте, _hunter, Вы писали:
_>Есть у меня такой класс:
_>
_>class a {
_> public:
_> class b * c;
// Надо написать так:
b *c;
//Ключевое слово class здесь не к месту, если я все правильно понял
//Ты ведь хочешь создать объект класса, а не сам класс описать.
//Класс должен быть описан ранее.
_> a ();
_> void SomeFunc();
_>};
_>a::a() {
_> c = new b();
_>};
_>void a::SomeFunc() {
c->>DoSomething();
_>};
_>
_>на c->DoSomething(); получаю ошибку "Member a::c cannot be used without an object"
_>Что делать?
Здравствуйте, Vasiliy_Krasnokutsky, Вы писали:
V_K>Здравствуйте, _hunter, Вы писали:
_>>Есть у меня такой класс:
_>>class a {
_>> public:
_>> class b * c;
V_K>// Надо написать так:
V_K>b *c;
V_K>//Ключевое слово class здесь не к месту, если я все правильно понял
можно и так написать — это elaborated type specifier и его наличие приведет к тому, что в области видимости охватывающей класс появится имя класса b (ты можешь теперь, к примеру, писать в глобальной области такое b * p = 0. Только вот что-то в этом примере не видать самого определения класса b — потому нельзя писать new b и c->DoSomeThing() — это требует кимплит типа..
Of course, the code must be complete enough to compile and link.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, _hunter, Вы писали:
_>>Есть у меня такой класс:
_>>[ccode] B>... _>> class b * c; B>... _>>};
B>А это еще что такое? B>Надо так:
Можно писать так как в оригинале, главное понимать, что происходит и где требуется комплит тип
Of course, the code must be complete enough to compile and link.
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Здравствуйте, Bell, Вы писали:
B>>Здравствуйте, _hunter, Вы писали:
_>>>Есть у меня такой класс:
_>>>[ccode] B>>... _>>> class b * c; B>>... _>>>};
B>>А это еще что такое? B>>Надо так: L_L>Можно писать так как в оригинале, главное понимать, что происходит и где требуется комплит тип
//class B{}; - ты мог бы написать такое, но у тебя такого нетclass A
{
public:
A();//здесь еще ничего нельзя поделать
~A();
private:
// B * p; - такое писать нельзя, потому как имя b еще не известноclass B * pB; //ага, такое уже можно
};
/*
нерпавильно, B - incomplete тип
A::A():pB(new B)
{
}
void A::Some()
{
pB->SomeThing();
}
*/class B
{
public:
void SomeThing(){}
};
//Ага, теперь правильно!
A::A():pB(new B)
{
}
void A::Some()
{
pB->SomeThing();
}
Of course, the code must be complete enough to compile and link.
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>Что имеется исходно?
L_L>//class B{}; - ты мог бы написать такое, но у тебя такого нет
L_L>class A
L_L>{
L_L>public:
L_L> A();//здесь еще ничего нельзя поделать
L_L> ~A();
void Some();
L_L>private:
L_L>// B * p; - такое писать нельзя, потому как имя B еще не известно
L_L> class B * pB; //ага, такое уже можно, В - имя глобального класса
L_L>};
L_L>/*
L_L>неправильно, B - incomplete тип
L_L>A::A():pB(new B)
L_L>{
L_L>}
A::~A()
{
delete pB;
}
L_L>void A::Some()
L_L>{
pB->>SomeThing();
L_L>}
L_L>*/
L_L>class B
L_L>{
L_L>public:
L_L> void SomeThing(){}
L_L>};
L_L>//Ага, теперь правильно!
L_L>A::A():pB(new B)
L_L>{
L_L>}
L_L>void A::Some()
L_L>{
pB->>SomeThing();
L_L>}
Of course, the code must be complete enough to compile and link.