[英]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.