出错信息:
:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(2398) : error C2512: 'CAllInstrument' : no appropriate default constructor available
        c:\program files\microsoft visual studio\vc98\atl\include\atlcom.h(2398) : while compiling class-template member function '__thiscall ATL::CComObject<class CAllInstrument>::ATL::CComObject<class CAllInstrument>(void *)'构造涵数:
CAllInstrument(int address, int Sad=NO_SAD,int GPIBBoardIndex=0) 
: m_clsR3267(address,Sad,GPIBBoardIndex)
{
}咋办,请各位高手多多指点谢谢!.

解决方案 »

  1.   

    不能使用代参数的构造函数,因为楼主使用ATL实现类厂,而缺省实现的类厂是简单的使用new进行生成对象的。所以楼主还需为上面的address参数提供一个缺省值(比如int address = 1)。如果楼主必须要求对象需给定的参数初始化后才能使用对象,可以在接口中多添加一个HRESULT Initialize(...)以进行初始化,再定义一个标志变量(如bool m_bInit)以判断是否经过了初始化,以防止对未经初始化的对象发起调用。
    再或者楼主自己实现类厂,在IClassFactory::CreateInstance中给出初始化参数,但这就要求类厂给出初始化参数,但是IClassFactory中并没有提供一个类似的接口可以让客户传递初始化参数,因此是不行的。
    不知道楼主原来是打算怎样让客户将初始化参数传递给组件的?
      

  2.   

    非常感谢,我采用了添加Initial()的方法实现了.