这是我在StackOverflow上的第一篇文章,因为我真的被卡住了。 我的问题是,每次运行以下代码时,在第一次调用函数InsertNode()时,返回临时节点都具有下一个节点和数据的正确值。但是,当再次调用该函数时,由于某些原因,头被重置为数据NULL,而下一个指针递归地指向同一地址。我在OOP中很难实现这一点,我已成功使用普通结构。但是对于OOP,我很困惑如何在main中声明Node * Node :: InsertNode(Node * head)方法,因为我得到一个错误,即InsertNode未声明。因此,作为一种解决方法,我将Node类外部的InsertNode声明为独立函数。我有一种感觉,这可能是导致问题的原因。我会很感激在我的代码中发生的事情或我应该改变的一些帮助。谢谢!
hashtable.cpp
benef
Hashtable.hpp
#include "Hashtable.hpp"
using namespace std;
Node::Node(){
data = NULL;
Node* nextP = NULL;
};
Node::~Node(){
}
Node* InsertNode(Node* head, int data){
Node* temp = new Node();
if(head->nextP == NULL){
head->data = data;
temp->nextP = head;
head = temp;
} else if(head->nextP!=NULL){
temp->nextP = head;
temp->data = data;
head = temp;
}
return head;
};
void Node::printNode(Node* head){
Node* temp = new Node();
temp = head;
while(temp->nextP != NULL){
printf("%d\n", temp->data);
temp = temp->nextP;
}
}
的main.cpp
#ifndef Hashtable_hpp
#define Hashtable_hpp
#include <stdio.h>
class Node
{
public:
Node* nextP;
Node();
~Node();
void printNode(Node* head);
int data = NULL;
private:
};
Node* InsertNode(Node* head, int data);
#endif /* Hashtable_hpp */
答案 0 :(得分:0)
所以我终于弄明白了这个问题。由于最初我直接引用了类函数InsertNode(),所以我试图避免使用未声明的标识符时我得到的错误。因此,作为一种解决方法,我将函数移到了类声明之外,这会导致更多问题,如上所述。现在我意识到当函数存在于Class中时,我通过首先取消引用(我的术语可能是错误的)使用以下函数引用它:head-&gt; InsertNode(head,data); 我最初尝试不同迭代的InsertNode(&amp; head,data)或Node * InsertNode(&amp; head,data)...等等。基本上试图通过编译器暴力破解:)。
我附上以下代码,请告诉我您对我可以改进的内容的评论。
Hashtable.cpp
#include "Hashtable.hpp"
#include <iostream>
using namespace std;
Node::Node(){
data = NULL;
Node* nextP = NULL;
};
Node::~Node(){
}
Node* Node::InsertNode(Node* head, int data){
Node* temp = new Node();
if(head->nextP == NULL){
head->data = data;
temp->nextP = head;
} else if(head->nextP!=NULL){
temp->nextP = head;
temp->data = data;
}
return temp;
};
void Node::printNode(Node* head){
Node* temp = new Node();
temp = head;
while(temp->nextP != NULL){
printf("%d\n", temp->data);
temp = temp->nextP;
}
}
Hashtable.hpp
#ifndef Hashtable_hpp
#define Hashtable_hpp
#include <stdio.h>
#include <iostream>
using namespace std;
class Node
{
int data = NULL;
Node* nextP;
public:
Node();
~Node();
Node* InsertNode(Node* head, int data);
void printNode(Node* head);
private:
};
#endif /* Hashtable_hpp */
的main.cpp
#include <iostream>
#include "stdio.h"
#include <string>
#include "Hashtable.hpp"
using namespace std;
Node* head = new Node();
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
Node temp2;
head = head->InsertNode (head, 10);
head = head->InsertNode (head, 20);
head = head->InsertNode (head, 30);
head = head->InsertNode (head, 40);
head = head->InsertNode (head, 50);
head = head->InsertNode (head, 60);
head = head->InsertNode (head, 70);
head->printNode(head);
return 0;