我正在尝试初始化我的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();
};
我做错了什么?我尝试了很多变种,但似乎没有任何效果。你能帮帮我吗?
答案 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?