1

정말 쉽지만이 문제는 현재 저를 괴롭 히고 있습니다. 지금클래스 선언이없는 친구 멤버 함수

#pragma once 
//... 
class arrayObj 
{ 
private: 
    // some variables... 
public: 
    //constructor, destructor, getters, etc... 
    friend void objManager::foo(); 
}; 
//... 
class objManager 
{ 
private: 
    //... 
    std::vector<std::shared_ptr<arrayObj>> array; 
public: 
    void foo(); 
    //other methods... 
}; 

을있는 그대로, 내 컴파일러는 objManager의 클래스 선언 (또는 멤버 함수를) 찾을 수 없습니다 :

header.h가 : 그래서, 난의 영향으로 C의 ++ 클래스를 쓰고 있어요 친구 포함을 위해 선언했다. 그러나 arrayObj 이전에 objManager 선언이 있으면 arrayObj는 더 이상 공유 포인터의 내부 벡터에 대해 선언되지 않습니다. 이 인스턴스에서 objManager를 선언하거나 다른 방법으로 objManager를 별도의 클래스로 해체하지 않고이 문제를 해결할 수있는 방법이 있습니까?

답변

2

당신은 arrayObj를 전달-선언 할 필요가, 그리고 마침내 다음 arrayObj의 정의를 objManager의 전체 정의를 넣어 :

친구를 선언하기 위해
class arrayObj; 

class objManager { 
    std::vector<std::shared_ptr<arrayObj>> array; // OK, fwd-declare is fine for this 

public: 
    void foo(); 

    // etc. 
}; 

class arrayObj { 
public: 
    friend void objManager::foo(); 
    // etc. 
}; 

는, 그 방법은 이미 있었다한다 본 것이므로 먼저해야만합니다. 전방 선언은 벡터의 결과입니다.

+0

이 작품은 - 감사합니다. – Huntrontrakkr

관련 문제