Microsoft Visual C++ v2010 で以下を含むコードをコンパイルおよびリンクしようとすると、未解決の外部エラーが発生します。
ClassOne.h
class CIOI;
class CClassOne
{
public:
CIOI *m_pInterface1;
ClassOne.cpp:
void ClassOne::StartProcessing()
{
m_pInterface1->Start();
}
void ClassOne::GetSnsMsg ()
{
m_pInterface1->GetSensMsg();
}
ClassTwo.h:
class ClassTwo : public CIOI
{
public:
//...
virtual void Start();
virtual void GetSensMsg();
ClassTwo.cpp:
void ClassTwo::Start()
{
Startup();
}
//...
void ClassTwo::GetSensMsg ()
{
int dummy = 5;
// ...
}
リンク中に次のメッセージが表示されます。
GetSensMsg 関数と同じスコープを持っているように見えるため、このコード セグメントに "Start" 関数を含めましたが、コードはこれに対して正常にコンパイルおよびリンクされます。未解決の外部メッセージの原因について、ご意見をお寄せいただければ幸いです。ありがとう!!
更新: CIOI の実装は次のとおりです: IOI.h:
class ClassOne;
class CIOI
{
CMessage entityMsg;
protected:
CInterfaceData *m_pDEs;
U16BIT *baseAddr;
RDISPMSG emitterData;
void ProcessEmitter(int first_half, int second_half);
public:
CIOI (CClassOne *pEM);
virtual ~CIOI();
virtual BOOL Initialize() = 0;
virtual void Start() = 0;
virtual void ProcessData(unsigned short msg_type = 0) = 0;
virtual void SendMessage(int MsgNum, WORD parm1 = 0, int msgNum2 = NoMsg, short msg1to2DelayCycles = 0) = 0;
};
CIOI クラスから GetSensMsg() の宣言が欠落しているように見えますか?