Re: Проблема с вызовом члена класса
От: Bell Россия  
Дата: 24.06.03 10:38
Оценка: -1
Здравствуйте, _hunter, Вы писали:

_>Есть у меня такой класс:


_>[ccode]

...
_> class b * c;
...
_>};

А это еще что такое?
Надо так:
b* c;
Любите книгу — источник знаний (с) М.Горький
Проблема с вызовом члена класса
От: _hunter Украина  
Дата: 24.06.03 10:31
Оценка:
Есть у меня такой класс:

class a {
  public:
    class b * c;
    a ();
    void SomeFunc();
};

a::a() {
  c = new b(); 
};

void a::SomeFunc() {
  c->DoSomething();
};


на c->DoSomething(); получаю ошибку "Member a::c cannot be used without an object"

Что делать?
Re: Проблема с вызовом члена класса
От: Vasiliy_Krasnokutsky Россия  
Дата: 24.06.03 10:35
Оценка:
Здравствуйте, _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"


_>Что делать?
Re[2]: Проблема с вызовом члена класса
От: _hunter Украина  
Дата: 24.06.03 10:40
Оценка:
Здравствуйте, Vasiliy_Krasnokutsky,

без class — аналогичная ошибка
Re[2]: Проблема с вызовом члена класса
От: Lorenzo_LAMAS  
Дата: 24.06.03 10:43
Оценка:
Здравствуйте, 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.
Re[2]: Проблема с вызовом члена класса
От: Lorenzo_LAMAS  
Дата: 24.06.03 10:44
Оценка:
Здравствуйте, Bell, Вы писали:

B>Здравствуйте, _hunter, Вы писали:


_>>Есть у меня такой класс:


_>>[ccode]

B>...
_>> class b * c;
B>...
_>>};

B>А это еще что такое?

B>Надо так:
Можно писать так как в оригинале, главное понимать, что происходит и где требуется комплит тип
Of course, the code must be complete enough to compile and link.
Re[3]: Проблема с вызовом члена класса
От: _hunter Украина  
Дата: 24.06.03 10:46
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Здравствуйте, Bell, Вы писали:


B>>Здравствуйте, _hunter, Вы писали:


_>>>Есть у меня такой класс:


_>>>[ccode]

B>>...
_>>> class b * c;
B>>...
_>>>};

B>>А это еще что такое?

B>>Надо так:
L_L>Можно писать так как в оригинале, главное понимать, что происходит и где требуется комплит тип

если писать b * c то получаю ту же ошибку
Re[3]: Проблема с вызовом члена класса
От: _hunter Украина  
Дата: 24.06.03 10:47
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

b* c не фурычит
Re[4]: Проблема с вызовом члена класса
От: Lorenzo_LAMAS  
Дата: 24.06.03 10:53
Оценка:
Что имеется исходно?

//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.
Re[5]: Проблема с вызовом члена класса
От: Lorenzo_LAMAS  
Дата: 24.06.03 10:56
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.