簡體   English   中英

類和結構,沒有默認構造函數

[英]Classes & Structs, no default contructor

我試圖建立一個鏈表,其元素是我自己指定的類型。 現在,我不會撒謊,因為我對C ++中的OOP沒有太多的經驗,但是我只遇到了一個錯誤。

我的LinkedList:

#include "Vehicle.h"
#include "string"
using namespace std;

class LinkedList
{
private:
    struct Node
    {
        Vehicle data;
        Node* next;
    };

    Node* root;
    int noofitems;

public:
    LinkedList();
    int getNoOfItems();
    Vehicle getItemByIndex(int index);
    void addItem(Vehicle itemIn);
    void deleteItem();
    void insertItem(Vehicle itemIn);
    ~LinkedList();
};

構造函數和addItem()

LinkedList::LinkedList() : root(NULL), noofitems(0) {}

void LinkedList::addItem(Vehicle itemIn)
{
    Node* temp;
    temp = new Node();
    temp->data = itemIn;
    temp->next = this->root;
    this->root = temp;
}

我的編譯器給我這個錯誤: error C2512: 'LinkedList::Node' : no appropriate default constructor available 現在,我嘗試給struct這樣的構造函數:

struct Node
{
    Vehicle data;
    Node* next;
    Node() : next(NULL) {}
};

但是,在舊錯誤之上,我又得到了一個新錯誤: IntelliSense: no default constructor exists for class "Vehicle" 構造函數一詞開始看起來不對,我真的很沮喪。 提前致謝。

順便說一句,如果需要車輛類別的詳細信息:

class Vehicle
{

protected:
    string make;
    string model;
    string regNo;
    int engineSize;
    bool rented;

public:
    Vehicle(string makeIn, string modelIn, string regNoIn, int engineSizeIn);
    string getMakeModel(); // return two values concatinated
    string getRegNo();
    int getEngineSize();
    bool getRented();
    void setRented(bool rentedIn);
    ~Vehicle();
};

Vehicle::Vehicle(string makeIn, string modelIn, string regNoIn, int engineSizeIn) :
                make(makeIn), model(modelIn), regNo(regNoIn), engineSize(engineSizeIn),
                rented(false)
{}

string Vehicle::getMakeModel()
{
    return make + " " + model;
}

string Vehicle::getRegNo()
{
    return regNo;
}

int Vehicle::getEngineSize()
{
    return engineSize;
}

bool Vehicle::getRented()
{
    return rented;
}

void Vehicle::setRented(bool rentedIn)
{
    rented = rentedIn;
}

Vehicle::~Vehicle(){}

Node的成員類型為Vehicle 由於無法默認構造Vehicle ,因此Node的默認構造函數被標記為已刪除。 您將需要提供自己的默認構造函數,以將Vehicle成員構造為某種狀態,例如

struct Node
{
    Vehicle data;
    Node* next;
    Node() : data("", "", "", 0), next(nullptr) {}
};

或為Vehicle提供默認的構造函數,例如

class Vehicle
{
    //...
public:
    Vehicle() = default;
    //...
};

該錯誤不言自明。 您尚未在Node類中明確初始化vehicle ,如下所示:

struct Node
{
    Vehicle data;
    Node* next;
    Node() : next(NULL) {} // NO initialization for vehicle
};

編譯器將嘗試使用其默認構造函數構造一個Vehicle ,但找不到任何內容。 在車輛類中,您定義了一個帶參數的構造函數:

Vehicle(string makeIn, string modelIn, string regNoIn, int engineSizeIn);

因此,編譯器不會為您生成一個。 為了解決這個問題,您可以自己定義一個默認的構造函數,也可以用default來聲明一個構造函數,這將迫使編譯器也生成一個:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM