1

I am trying to initialize my MedList but it's not working. Here's what I'm talking about: 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];
}

the error above is:

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

this is the medicine class

class Medicine{

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

The Dynamic Vector class:

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();

};

What am I doing wrong? I tried a lot of variants but nothing seems to work. Could you help me?

4

3 回答 3

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. 为什么?好吧,当构建存储库时,编译器也会尝试使用它们的默认构造函数来构造所有成员对象。这正是您想要的,因此没有理由尝试改变编译器的行为。

于 2013-03-31T12:18:04.317 回答
0

构造函数应该是:

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

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

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

于 2013-03-31T12:15:07.067 回答
0

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

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

应该

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

或(通常的写法)

this->MedList=new DynamicVector<Medicine>;

请参阅此处了解更多信息。

编辑。确保您已在类中声明了 dynamicVector 构造函数。


带空括号的默认构造函数

类型名称后的括号是否与 new 不同?

于 2013-03-31T12:20:11.517 回答