2015-03-05 7 views
-2

Я отчаянно бороться эту тривиальную, но Страдание вопрос У меня есть классотсутствует точка с запятой перед тем общий тип указателя

///A.h 
class A 
{ 
    //declare something 
}; 
///A.cpp 
//implement that something of A 

затем другой класс

///B.h 
class A; 
class B 
{ 
private: 
    A_PTR aptr; //Missing ';' before aptr 
public: 
    A_PTR getA(); 
}; 
///B.cpp 
typedef std::shared_ptr<A> A_PTR; 
//implement all B's methods 

Почему я получаю сообщение об ошибке в A_PTR как объявление aptr в классе B?

+3

Вы используете 'A_PTR', прежде чем объявили об этом. –

ответ

3

Потому что A_PTR еще не определено. Вам необходимо перенести определение над первой используемой вами точкой:

///B.h 
class A; 
typedef std::shared_ptr<A> A_PTR; 
class B 
{ 
private: 
    A_PTR aptr; 
public: 
    A_PTR getA(); 
}; 
+0

@ Борлидер, нет. Только конструкторы, обладающие владением указателем, нуждаются в полной декларации (чтобы они могли создать стираемый тип для этого типа). –

+0

@JonathanWakely Хорошо, я уверен, что у меня возникла такая ошибка раньше ... странно (удалив мой комментарий) – Borgleader

+0

Думаю, вам понадобится определение только в том случае, если вы разыщите общий указатель в заголовке. Общий указатель не должен знать размер объекта. – TartanLlama

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