初始化动态矢量列表

时间:2013-03-31 12:04:39

标签: c++ dynamic vector

我正在尝试初始化我的MedList,但它无法正常工作。这就是我所说的:  repository.h

#include "../domain/farmacy.h"
#include "../utils/DynamicVector.h"
class Repository{

private:
    DynamicVector<Medicine>* MedList; //I made it pointer so it can be dynamic

public:
Repository(); //constructor

repository.cpp

#include "../domain/farmacy.h"
#include "repository.h"
#include "../utils/DynamicVector.h"
#include <stdlib.h>

Repository::Repository(){
    this->MedList=new DynamicVector<Medicine>::DynamicVector(); //error
}

DynamicVector.h

template <typename Element> //this is the Dynamic Vector constructor
DynamicVector<Element>::DynamicVector()
{
    this->cap=10;
    this->len=0;
    this->elems=new Element[this->cap];
}

上面的错误是:

Multiple markers at this line
    - no match for 'operator=' in '((Repository*)this)->Repository::MedList = (int*)operator 
     new(4u)'
    - expected type-specifier
    - candidate is:
    - expected ';'

这是药类

class Medicine{

private:
    int ID;
    std::string nume;
    double concentratie;
    int cantitate;

动态矢量类:

template <typename Element>
class DynamicVector{

private:
    Element* elems;
    int cap;
    int len;
    void resize();
    void CopyToThis(const DynamicVector& v);

public:
    DynamicVector(); //constructor implicit
    DynamicVector(const DynamicVector& ); //constructor de copiere
    DynamicVector& operator=(const DynamicVector& );
    ~DynamicVector();
    void addElement(Element elem);
    Element delElementAtPosition(int pos);
    Element getElementAtPosition(int pos);
    int getLen();

};

我做错了什么?我尝试了很多变种,但似乎没有任何效果。你能帮帮我吗?

3 个答案:

答案 0 :(得分:1)

我认为你用c ++语法混淆了用其他语言创建对象,例如Java或C#。

在c ++中,只需通过声明变量来调用构造函数:

DynamicVector<Element> medList; // Calls DynamicVector<Element>::DynamicVector()

C#中的new运算符是为变量动态分配空间,并返回指向已分配空间的指针。要在此处使用它,您必须将Repository :: MedList声明为指针类型,并将其初始化为:

DynamicVector<Medicine>* MedList; // in repository.h

this->MedList = new DynamicVector<Medicine>(); // in repository.cpp

然而,正如Andy Prowl指出的那样,让编译器为你做内存管理要好得多。为此,您应该完全删除repository.cpp中的错误行。为什么?好吧,在构建存储库时,编译器还尝试使用其默认构造函数构造所有成员对象。这正是您想要的,因此没有理由尝试改变编译器的行为。

答案 1 :(得分:0)

构造函数应该是:

Repository::Repository(){
    this->MedList=new DynamicVector<Medicine>;
}

DynamicVector()调用DynamicVector的构造函数。

DynamicVector :: DynamicVector()是指向构造函数地址的指针

答案 2 :(得分:0)

您的C ++版本可能不允许构造函数为empty()。

this->MedList=new DynamicVector<Medicine>::DynamicVector(); //error

应该是

this->MedList=new DynamicVector<Medicine>::DynamicVector; 

或(通常的写作方式)

this->MedList=new DynamicVector<Medicine>;

有关详细信息,请参阅此处。

修改。确保已在类中声明了dynamicVector构造函数。


Default constructor with empty brackets

Do the parentheses after the type name make a difference with new?