类不存在默认构造函数

Posted

技术标签:

【中文标题】类不存在默认构造函数【英文标题】:No default constructor exists for a class 【发布时间】:2020-03-20 22:00:41 【问题描述】:

运行程序时出现以下错误:

“DynamicArray”

'DynamicArray':没有合适的默认构造函数可用。

你能帮帮我吗?

Repository.h

class Repository 

private:
    DynamicArray Repository_Dogs;

public:
    Repository(int capacity , int Size_Dogs_List);

;
Dog::Dog(char* name, char* breed, char* birth_date, char* vaccinations_counter, char* photograph)

    strcpy(this->Name, name);
    strcpy(this->Breed, breed);
    strcpy(this->Birth_Date, birth_date);
    strcpy(this->Vaccinations_Counter, vaccinations_counter);
    strcpy(this->Photograph, photograph);

存储库.cpp


Repository::Repository(int capacity , int size_Dogs_List)

    DynamicArray newDynamicArray =  DynamicArray(capacity,size_Dogs_List);
    this->Repository_Dogs = newDynamicArray;



DynamicArray.cpp

DynamicArray::DynamicArray(int capacity, int size_Dogs_List)

    this->Capacity_List = capacity;
    this->Size_Dogs_List = size_Dogs_List;
    this->Dogs_List = (Dog*)malloc(this->Capacity_List * sizeof(Dog));

DynamicArray.h(构造函数)

public:

    DynamicArray(int capacity, int Size_Dogs_List);

【问题讨论】:

【参考方案1】:

像这样定义构造函数

Repository::Repository(int capacity , int size_Dogs_List) 
    : Repository_Dogs( capacity, size_Dogs_List )


并且使用运算符 new 代替 C 函数 malloc。

【讨论】:

new Dog[100] 不起作用,我应该如何分配内存? @VladGhetina 我无法回答,因为我没有足够的信息,例如为什么它不起作用。 Dog 类是否有默认构造函数? @VladGhetina Dog 类没有默认构造函数。您可以使用placement new 运算符,但我认为您还不知道......

以上是关于类不存在默认构造函数的主要内容,如果未能解决你的问题,请参考以下文章

通过将 cacheManager 迁移到构造函数注入,类不存在

错误 C2512:没有合适的默认构造函数可用(不是类)

Java 构造函数的默认访问修饰符

类不包含构造函数错误

类不包含用于自动装配的匹配构造函数

Kotlin:为什么构造函数参数默认具有“内部”可见性?