首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++“没有合适的默认构造函数可用”

C++“没有合适的默认构造函数可用”
EN

Stack Overflow用户
提问于 2011-06-19 15:24:25
回答 2查看 3.6K关注 0票数 4

我尝试在不使用STL的情况下创建数组的链表。然而,我在将数组传递给我的链表时遇到了困难...

当我编译时,我得到上面列出的错误。如何将数组传递给链表?谢谢!(有问题的代码以**标记,测试时请删除)

SinglyLinkedList.h

代码语言:javascript
运行
复制
#pragma once 

#ifndef SinglyLinkedList_h
#define SinglyLinkedList_h

#include<iostream>

template <typename Type>
struct node
{

    Type value;
    node *next;
};

template <typename Object>
class SinglyLinkedList
{

private:
    node<Object> *head;

public:
    SinglyLinkedList();
    ~SinglyLinkedList();
    bool insert(Object x);
    bool empty();
};

template <typename Object>
SinglyLinkedList<Object>::SinglyLinkedList()
{
    this->head = NULL;
}

template <typename Object>
bool SinglyLinkedList<Object>::insert(Object x)
{
    node<Object> *temp = new node<Object>;
    temp->value = x;
    temp->next = NULL;

    if (this->head==NULL)
    {
        this->head = temp;
    }
    else
    {
        node<Object> *S = this->head, *P = S;

        while ((S->value < temp->value)&&(S != NULL))
        {
            S = S->next;
            P = S;
        }
        if(S == NULL)
            temp->next = P;
        else
        {
            temp->next = S;
            P->next = temp;
        }
    }
    return true;
}

template <typename Object>
bool SinglyLinkedList<Object>::empty()
{
    if(this->head == NULL)
        return true;
    else
        return false;
}

template <typename Object>
SinglyLinkedList<Object>::~SinglyLinkedList()
{
    delete this->head;
}

#endif

DynamicArrayClass.h

代码语言:javascript
运行
复制
#pragma once

#ifndef DynamicArrayClass_h
#define DynamicArrayClass_h
#include<iostream>

template <class T>
class DynamicArrayClass
{
private:
    T *array;
    int size, numItems;

public:
    DynamicArrayClass(int newSize)
    {
        size = newSize;
        numItems=0;
        array = new T[size];
    }

    int GetSize(){ return size;}
    int GetNumItems() const { return numItems; }
    bool isEmpty() const { return numItems==0; }
    bool isFull() const { return numItems==size; }
    bool addItem (const T &object)
    {
        if(isFull())
        {
            return false;
        }
        else
        {
            array[numItems++] = object;
            return true;
        }
    }
    const T& getItem(int index) {return array[index];}
    void makeEmpty()
    {
        numItems = 0;
    }

    ~DynamicArrayClass()
    {
        if(array !NULL)
            delete [] array;
    }   


};

#endif

main.cpp

代码语言:javascript
运行
复制
#include "DynamicArrayClass.h"
#include "SinglyLinkedList.h"
#include "stopwatch.h"

#include<iostream>

int main()
{
    int totalCapacity = 0;
    int arrayAddSize = 0;
    while(totalCapacity < 10000)
    {
        if(totalCapacity==0)
        {
            DynamicArrayClass<int> *array1 = new DynamicArrayClass<int>(25);
            totalCapacity = 25;
            SinglyLinkedList<DynamicArrayClass<int>> *list = new SinglyLinkedList<DynamicArrayClass<int>>();

            for(int i = 0; i<25; i++)
            {
                array1->addItem(1); 
            }       
            **list->insert(*array1);**
        }
        else
        {
            arrayAddSize = (totalCapacity/2);
            totalCapacity = totalCapacity + arrayAddSize;
            DynamicArrayClass<int> *array = new DynamicArrayClass<int>(arrayAddSize);
            SinglyLinkedList<DynamicArrayClass<int>> *list = new SinglyLinkedList<DynamicArrayClass<int>>();
            for(int i=0; i <arrayAddSize; i++)
            {
                array->addItem(1);
            }
        }

    }
    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2011-06-19 15:32:12

问题出在insert的这一部分

代码语言:javascript
运行
复制
node<Object> *temp = new node<Object>;

其中node包含Object。为了构造它,Object需要一个默认的构造函数。

也许您可以向node添加一个构造函数来复制它必须存储的值?例如,这将使它成为:

代码语言:javascript
运行
复制
node<Object> *temp = new node<Object>(x, NULL);
票数 4
EN

Stack Overflow用户

发布于 2011-06-19 15:32:22

代码语言:javascript
运行
复制
node<Object> *temp = new node<Object>;

SinglyLinkedList::insert中的这一行导致了我假设的错误。问题是,您的node结构看起来像这样:

代码语言:javascript
运行
复制
template <typename Type>
struct node
{
    Type value;
    node *next;
};

Type value;将由new node<Object>调用默认构造。为node结构提供一个合适的构造函数就可以了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6401147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档