请高手帮小弟我看一下这段代码毛病在那啊小弟我是照书上直接写出的还是错
请高手帮我看一下这段代码毛病在那啊,我是照书上直接写出的还是错
#include <iostream.h>
class IA
{
public:
virtual void f1()=0;
virtual void f2()=0;
};
class IB
{
public:
virtual void g1()=0;
virtual void g2()=0;
};
class A;
void Queryinterface(A*x,void* *ppv);
class A:public IA, public IB
{
private:
char *s1,*s2,*s3,*s4;
public:
A()
{
s1="this is f1()";
s2="this is f2()";
s3="this is g1()";
s4="this is g2()";
}
virtual void f1(){cout<<s1<<endl;}
virtual void f2(){cout<<s2<<endl;}
virtual void g1(){cout<<s3<<endl;}
virtual void g2(){cout<<s4<<endl;}
};
void main()
{
IA*pIA;
A*a=new A;
Queryinterface(a,(void* *)&pIA);
pIA->f1 ();
delete a;
}
void Queryinterface(A&x,void* *ppv){*ppv=(IA*)(&x);}
//错误代码是error LNK2001: unresolved external symbol "void __cdecl Queryinterface(class A *,void * *)" (?Queryinterface@@YAXPAVA@@PAPAX@Z)
Debug/MFCexp14_1.exe : fatal error LNK1120: 1 unresolved externals
------解决思路----------------------
还有错误你来找我
主要是指针的问题
其实完全不用定义Queryinterface这个函数
要用C++,直接写pIA = dynamic_cast<IA*>a; 就可以完成指针的转换
#include <iostream.h>
class IA
{
public:
virtual void f1()=0;
virtual void f2()=0;
};
class IB
{
public:
virtual void g1()=0;
virtual void g2()=0;
};
class A;
void Queryinterface(A*x,void* *ppv);
class A:public IA, public IB
{
private:
char *s1,*s2,*s3,*s4;
public:
A()
{
s1="this is f1()";
s2="this is f2()";
s3="this is g1()";
s4="this is g2()";
}
virtual void f1(){cout<<s1<<endl;}
virtual void f2(){cout<<s2<<endl;}
virtual void g1(){cout<<s3<<endl;}
virtual void g2(){cout<<s4<<endl;}
};
void main()
{
IA*pIA;
A*a=new A;
Queryinterface(a,(void* *)&pIA);
pIA->f1 ();
delete a;
}
void Queryinterface(A&x,void* *ppv){*ppv=(IA*)(&x);}
//错误代码是error LNK2001: unresolved external symbol "void __cdecl Queryinterface(class A *,void * *)" (?Queryinterface@@YAXPAVA@@PAPAX@Z)
Debug/MFCexp14_1.exe : fatal error LNK1120: 1 unresolved externals
------解决思路----------------------
还有错误你来找我
主要是指针的问题
其实完全不用定义Queryinterface这个函数
要用C++,直接写pIA = dynamic_cast<IA*>a; 就可以完成指针的转换