오늘 클래스디자인을 하면서 전방선언을 사용했습니다.

전방선언(Front Definition)은 뒤쪽에 있는 클래스의 이름을 앞쪽에 있는 것처럼 인식시키기 위해
사용하는거라죠

---------
class CEnergyNode; // 전방선언

class CEnergyLink : public CComponent
{
public:
        CEnergyNode *m_pNode[2];
        int m_Port[2];

        void Link(CEnergyNode *pnode1, int port1, CEnergyNode *pnode2, int port2);
};

class CEnergyNode : public CComponent
{
public:
        CEnergyLink* m_pLink[32];
        int m_EnergyOfLink[32];
        CEnergyNode() { ResetState(); }
        void SendEnergy(int port, int energy)
        {
                int n = 0;
                if(m_pLink[port]->m_pNode[0] == this) n = 1;
                m_pLink[port]->m_pNode[n]->m_EnergyOfLink[m_pLink[port]->m_Port[n]] = energy;
                if(energy != 0)
                g_Item.AddTail(m_pLink[port]->m_pNode[n]);
        }
}

------
Node 가 Link를 갖고 있고 Link도 Node를 갖고 있기 때문에 한쪽은 전방선언을 해 주어야 하는 상황이었습니다. (어쩔 수 없는 선택.. ㅠ.ㅠ)

어쨌든... 이렇게 잘 하고 있는데..

if(m_pLink[port]->m_pNode[0] == this) n = 1;

이 부분에서 자꾸 에러가 나더군요.(선언되지 않았다니 뭐라나..)

분명히 앞쪽에 선언해도.. ㅠ.ㅠ

------------------------
결국 해결책은 클래스 선언 안쪽에 있는 함수를 바깥쪽으로 빼 내어서 해결을 봤습니다.

정말 억울하게 1시간 이상을 소비해 버렸지요

-_- 전방참조를 하실때에는(그럴일이 흔치는 않겠지만..) 꼭 함수는 밖으로 빼내서 쓰세요...
profile