使用模板时从此处实例化C ++错误

时间:2011-07-29 08:44:32

标签: c++ vxworks

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;     }

我不知道为什么我会面对这些错误,任何人都可以帮助我解决这个问题。

谢谢!

2 个答案:

答案 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是基金类型的有效值,但是参考容器的容器结束标记。