我只是在其中一个结构上测试函数,但是它不会到达它们。 这是到目前为止的完整代码:
更新
#include <iostream>
#include <string>
#include <cstdlib>
#include <cstddef>
using namespace std;
struct Node{
string name;
string address;
int phoneNum;
struct Node* next;
};
Node insertInOrder(Node p, string theName);
void push(struct Node*& head, string theName);
int main(){
cout<<"\tEnter S or s to show the list contents \n"
<<"\tEnter A or a to add a node to the list \n"
<<"\tEnter D or d to delete a node from the list \n"
<<"\tEnter Q or q to quiet the program \n"
<<"Make your selection: "<<endl;
struct Node* newNode = new Node;
push(newNode, "yeah");
cout<<newNode;
return 0;
}
void push(struct Node*& head, string theName){
struct Node* newNode = new Node;
newNode->name = theName;
newNode->next = head;
head = newNode;
}
Node insertInOrder(Node p, string theName){
if(p == NULL || p.name >= theName){
return new Node(p, theName);
}
else{
p.next = insertInOrder(p.next, theName);
return p;
}
}
我收到一条错误消息:对于此代码,'sizeof'无法应用于不完整类型'Node':
void push(struct Node*& head, string theName){
struct Node* newNode = malloc(sizeof(struct Node));
newNode->name = theName;
newNode->next = head;
head = newNode;
}
我正在尝试将此代码转换为我的代码,但是我收到了一个错误:
Node insertInOrder( int k, Node p ) {
if( p == " " || p.item >= k )
return new Node( k, p );
else {
p.next = insertInOrder( k, p.next );
return p;
}
}
这就是我翻译它的方式:
Node insertInOrder(Node p, string theName){
if(p == " " || p.name >= theName){
return new Node(p, theName);
}
else{
p.next = insertInOrder(p.next, theName);
return p;
}
}
这是此代码的错误:
if(p == " " || p.name >= theName){
return new Node(p, theName);
错误:
- comparison with string literal results in unspecified behaviour [-Waddress]
- request for member ‘name’ in ‘p’, which is of pointer type ‘Node*’ (maybe you meant to use ‘-
>’ ?)
- comparison between distinct pointer types ‘Node*’ and ‘const char*’ lacks a cast [-
fpermissive]
p.next = insertInOrder(p.next,theName); return p;
错误:
Invalid arguments ' Candidates are: Node insertInOrder(Node, std::basic_string<char,std::char_traits<char>,std::allocator<char>>) '
- could not convert ‘p.Node::next’ from ‘Node*’ to ‘Node’
答案 0 :(得分:1)
有些观点:
malloc
,因为您正在使用C ++并使用new
和delete
sizeof(Node)
就足够了,但你不会直接使用malloc Node insertInOrder(Node p, string theName)
接受一个具体的节点并返回一个具体的Node
,但你的结构中的下一个字段是指向Node
的指针,我想你应该在你的内容中保持一致正在使用,因为你使用指针链接列表更合适p == " "
)之间直接使用比较运算符,您应该只检查name
字段