node.hpp에 따라
#ifndef LINKED_IMPLEMENTATION_TPP
#define LINKED_IMPLEMENTATION_TPP
template <typename T>
class node {
...
friend class linked<T>;
};
template <typename T>
class linked {
...
};
#endif
편집
012 linked.hpp 포함하지 않고
linked.hpp
#pragma once
#include "node.hpp" // just because I guess you will use it in linked implementation
template <typename T> class linked {
...
};
그래서 당신은 사용 노드를 유지할 수 있습니다. 개인 헤더를 보관할 수도 있으며 사용자에게 제공하지 않습니다. 그러나 어떤 코드가 링크 된 클래스를 사용하고자한다면 linked.hpp 만 포함하면됩니다. 옵션 node.hpp
#pragma once
template <typename T> class node {
...
class linked;
friend class linked<T>;
};
linked.hpp
#pragma once
#include "node.hpp"
template <typename T> class node<T>::linked {
...
};
이러한 템플릿 클래스 파일을 cpp를 만드는 아무 소용이 없다로서
편집 . [템플릿은 헤더에 구현해야합니다 *] (https://stackoverflow.com/q/495021/501250) (필요한 모든 인스턴스화를 명시 적으로 인스턴스화하지 않는 한 거의 좋은 개념이 아닙니다.) 템플릿 클래스 멤버를 인스턴스화하기 위해서는 템플릿 클래스 멤버의 정의를 알아야합니다. – cdhowie
만약 내가 당신이라면 나는'node'를 구조체로 선언하고 그것의 모든 멤버를 public으로 선언 할 것입니다. 편의성 객체이므로 액세스 제어가 필요하지 않습니다. – NathanOliver
@cdhowie 나는 다른 코드를 가지고있다. 이것은 이것의 단순화 된 버전이다. 그리고 나에게는 각 클래스마다 다른 cpp 파일을 만들어야한다. 전달 선언 또는 이와 유사한 것을 구현하는 방법 –