template<class Concept> class OMAbstructContainer
{
friend class OMIterator<Concept> ;
// ...
};
template<class Concept> class OMStaticArray :
public OMAbstructContainer<Concept> {
protected:
Concept *theLink;
int count;
void* AllocateMemory(int size);
bool ReleaseMemory(void* pMemory);
public:
// Constructor
OMStaticArray(int size): count(0)
{
theLink = NULL;
theLink = (Concept*) this->AllocateMemory(size);
}
};
template<class Concept> class OMCollection :
public OMStaticArray<Concept>{
public:
// Constructor
OMCollection(int theSize=20):
OMStaticArray<Concept>(theSize) {
size = theSize;
}
// Destructor
~OMCollection() { } // The link is delete in ~OMFixed()
//...
};
现在我正在使用上面的集合
class MyVar
{
public :
// Constructors and destructors:
MyVar(int Index) { }
// ...
};
OMCollection<MyVar*> m_pCollVars;
当我在vxworks6.8 C ++编译器中运行上面的代码时,我收到以下错误
error: instantiated from 'OMStaticArray<Concept>::OMStaticArray(int) [with Concept = MyVar*]'
我面临很多错误,如上所述。用于使用VxWorks 5.5编译器编译的代码。
我有以下错误 错误:从'OMCollection :: OMCollection(int)[with Concept = MyVar *]'实例化
我正在接受以下行: OMCollection(int theSize = DEFAULT_START_SIZE): OMStaticArray(theSize){ size = theSize; }
我不知道为什么我会面对这些错误,任何人都可以帮助我解决这个问题。
谢谢!
答案 0 :(得分:0)
您的问题没有明显错误。我看到的一个问题是你正在OMStaticArray<Concept>
实例化Concept = MyVar*
;所以,
Concept *theLink; ==> MyVar **theLink;
现在,您的AllocateMemory()
会返回void*
;
您确定要将void*
转换为MyVar**
吗?由于C风格的演员你并没有注意到,但这种说法并不令人信服。
答案 1 :(得分:0)
您正在使用IBM Rhapsody,对吗? Rhapsody提供的容器是“引用容器”,但模板参数应该是包含指针的容器的类,而不是指向类的指针。
例如
class Foo {...};
OMColloction< Foo > myFooCollection;
是你想要的。
注意:所有Rhapsody容器必须使用从不基本类型的类进行实例化,因为0是基金类型的有效值,但是参考容器的容器结束标记。