我正在嘗試用 C 撰寫一個串列類,并且我想多載<<運算子。但是,當我將串列物件傳遞給運算子函式時,會更改物件內的值。StackOverflow 上的其他問題并沒有幫助解決這個問題。多余的代碼已從以下內容中洗掉:
鏈表.h:
#include "Node.h"
#include <iostream>
class LinkedList {
public:
Node* head;
Node* tail;
int size;
LinkedList();
void push(int data);
friend std::ostream& operator<<(std::ostream& os, const LinkedList& list);
};
這是 LinkedList.cpp:
#include "LinkedList.h"
LinkedList::LinkedList() {
head = nullptr;
tail = nullptr;
size = 0;
}
void LinkedList::push(int data) {
Node newNode = Node(data);
if (size == 0) {
head = &newNode;
tail = &newNode;
} else {
tail->next = &newNode;
newNode.prev = tail;
tail->next = &newNode;
}
size ;
}
std::ostream& operator<<(std::ostream& os, const LinkedList& list) {
os << "[";
os << list.head->data;
os << "]";
return os;
}
(目前我只希望它輸出串列中第一個元素中的資料)
這是驅動程式代碼:
#include "LinkedList.h"
int main() {
LinkedList lis = LinkedList();
lis.push(5);
std::cout << lis;
}
請溫柔點,我是 C 的新手。
編輯:抱歉,這里是 Node.h:
#pragma once
class Node {
public:
int data;
Node* next;
Node* prev;
Node(int data);
};
和 Node.cpp
#include "Node.h"
Node::Node(int initdata) {
data = initdata;
next = nullptr;
prev = nullptr;
}
我還添加了 LinkedList.cpp 的其余部分。我從上面的代碼中期望的輸出是[5],因為我將 5 推入串列然后輸出它(或者,至少,嘗試)。
uj5u.com熱心網友回復:
您需要與new運營商分配新節點。
這是您更正的代碼:
#include <iostream>
class Node {
public:
int data;
Node *next;
Node *prev;
Node(int data);
};
Node::Node(int initdata) {
data = initdata;
next = nullptr;
prev = nullptr;
}
class LinkedList {
public:
Node *head; // <<<<<<<<<<< change here
Node *tail; // <<<<<<<<<<< change here
int size;
LinkedList();
void push(int data);
friend std::ostream& operator<<(std::ostream& os, const LinkedList& list);
};
LinkedList::LinkedList() {
head = nullptr;
tail = nullptr;
size = 0;
}
void LinkedList::push(int data) {
Node *newNode = new Node(data); // <<<<<<<<<<< change here
if (size == 0) {
head = newNode; // <<<<<<<<<<< change here
tail = newNode; // <<<<<<<<<<< change here
}
else {
tail->next = newNode;
newNode->prev = tail;
tail->next = newNode;
}
size ;
}
std::ostream& operator<<(std::ostream& os, const LinkedList& list) {
os << "[";
os << list.head->data;
os << "]";
return os;
}
int main() {
LinkedList lis = LinkedList();
lis.push(5);
std::cout << lis;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/331746.html
上一篇:我無法將幾何點的值分配給變數
