使用模板时从这里实例化的c++错误

C++ error instantiated from here when using templates

本文关键字:实例化 c++ 错误 这里      更新时间:2023-10-16
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编译器。

我有以下错误error: instantiated from 'OMCollection::OMCollection(int) [with Concept = MyVar*]'

我得到以下行:OMCollection(int size =DEFAULT_START_SIZE):OMStaticArray(规模){size = size;}

我不知道为什么我面对这些错误,有人能帮助我如何解决这个问题吗?

谢谢!

你的问题没有明显的错误。我看到的一个问题是你实例化了OMStaticArray<Concept>,其中Concept = MyVar*;

Concept *theLink; ==> MyVar **theLink;

现在你的AllocateMemory()返回void*;

您确定要将void*转换为MyVar**吗?由于c风格的强制转换,你没有注意到这一点,但这种说法并不令人信服。

您正在使用IBM Rhapsody,对吗?Rhapsody提供的容器是"引用容器",但是模板形参应该是容器要包含指针的类,而不是指向类的指针。

class Foo {...};
OMColloction< Foo > myFooCollection;

就是你想要的。

注意:所有Rhapsody容器都必须用一个类实例化,而不是一个基本类型,因为0是基金类型的有效值,而是引用容器的容器结束标记。