1

Я получаю сообщение об ошибке ниже в классе, объявляя новый указатель типа b. Пожалуйста помоги.forward declaration и typename с использованием нового ключевого слова

#include <iostream> 

namespace B 
{ 
    class b; 
} 
class a 
{ 
    private: 

    B::b* obj_b; 

    public: 

    a(){} 
    ~a(){} 
    void create() 
    { 
     b* obj_b = new b; 
    } 
}; 
class b 
{ 
    private: 

     a *obj_a; 

    public: 
     b() 
     { 
      obj_a->create(); 
     } 
     ~b(){} 
}; 
int main() 
{ 
    b obj; 

    return 0; 
} 
+2

Я не вижу ошибки, просто кучу кода. Может, ты что-то забыл? – bk1e

+0

и, пожалуйста, измените имена. Еще несколько нажатий клавиш не навредят – Chubsdad

ответ

1

В вашем коде было много ошибок. Они связаны с форвардной декларацией, полным использованием имени и т. Д.

namespace B 
{ 
    class b; 
} 
class a 
{ 
private: 

    B::b* obj_b;   // change 1 (fully qualified name) 

public: 
    void create();   // change 2 (can't use b's constructor now as B::b is not 
          // yet defined) 
    a(){} 
    ~a(){} 

}; 

class B::b     // change 3 (fully qualified name) 
{ 
private: 

    a *obj_a; 

public: 
    b() 
    { 
     obj_a->create(); 
    } 
    ~b(){} 
}; 

void a::create()    // definition of B::b's constructor visible now.  
{ 
    B::b* obj_b = new B::b; // And here also use fully qualified name 
} 

int main() 
{ 
    B::b obj; 

    return 0; 
} 
+0

спасибо, что это сработало. Извините, я новичок в этом. – pandoragami

+1

@scriptingalias: Не приносите извинения за задание вопросов. – manneorama

6
b* obj_b = new b; 

И есть ваша проблема. Вы можете объявить указатель на B, поскольку указатели имеют одинаковый размер, но вы не можете построить один или взять один по значению без предоставления определения класса компилятору. Как это возможно знать, как распределить память для неизвестного типа?

+0

Да, это то, что я написал на первой строке, но спасибо, что сейчас работает – pandoragami

+0

Ну, вы поняли, что это дало вам ошибку, но, очевидно, не почему. –

+0

Спасибо за этот (теперь, очевидный) ответ! –

Смежные вопросы