我的LLL问题与我有关。作为参考,这应该是一个具有指向主题标题结构的指针的类,然后该主题标题的结构具有指向特定于该主题的各个帖子的LLL的指针。我的问题在于函数的else部分,因为我可以通过初始部分来解决问题,并在该主题中应用注释。出于某种原因,正如我通过在我的代码中输入cout语句所发现的那样,无论我输入的任何值作为“发表评论”都会覆盖之前在初始点中的任何内容,并且只保留该值。
这对我来说可能是一个愚蠢的错误,但我已经看了很长一段时间,并且无法弄清楚我做了什么来实现这一点。我在其他之后立即发出了一个cout声明(如你所见),并输出最近输入的主题。
非常感谢任何见解!这里有说法:
int blog::enter(char new_topic[], char new_comment[])
19 {
20
21 post * new_post = new post;
22 title * new_thread = new title;
23 post * temp;
24 temp = NULL;
25 title * temp2;
26 temp2 = NULL;
27 if(!head)
28 {
29
30 temp2 = new_thread;
31 new_thread -> topic = new_topic;
32 temp2 -> next_topic = NULL;
33 head = temp2;
34
35 temp2 -> first_post = new_post;
36 temp = new_post;
37 temp -> comment = new_comment;
38 temp -> next = NULL;
39 return 1;
40 }
41 else
42 {
43 cout << head -> topic << endl;
44 temp2 = head;
45 while(head -> topic != new_topic)
46 {
47 cout << "While"<< endl;
48 temp2 = temp2 -> next_topic;
49 if(new_topic == temp2 -> topic)
50 {
51 delete new_thread;
52 }
53 }
54 if(!temp2)
55 {
56 temp2 = new_thread;
57 cout << "TEMP2 NEW" << endl;
58 }
59 temp = temp2 -> first_post;
60 cout << "NOLOOP" << endl;
61
62 while(temp)
63 {
64 temp = temp -> next;
65 cout << "WHILE2" << endl;
66 }
67
68 temp = new_post;
69 temp -> comment = new_comment;
70 temp -> next = NULL;
71 new_post = temp;
72
73
74 return 1;
75 }
76 }
我的头文件:
3 #include <iostream>
4 #include <cstring>
5 #include <cctype>
6 using namespace std;
7
8 // stuct to hold the individual posts
9
10 struct post
11 {
12
13 int rating;
14 char * comment;
15 post * next;
16 post * tail;
17
18 };
19
20 // struct to hold each topic with a pointer to the list of posts underneath that topic
21 struct title
22 {
23
24 char * topic;
25 title * next_topic;
26 post * first_post;
27 };
28
29 //class to hold the functions
30
31 class blog
32 {
33
34 public:
35
36 blog();
37 ~blog();
38 int enter(char new_topic[], char new_comment[]);
39 int display(char new_topic[]);
40 int display_all();
41 int rate(char new_topic[], char new_keyword[], int new_rating);
42 int remove(char new_topic[], char new_keyword[]);
43
44 private:
45
46 title * head;
答案 0 :(得分:0)
我假设你的blog()构造函数将head初始化为NULL? 您将输入(..)指针传递给外部字符串,然后将这些指针保留在您的结构中。 原始字符串存储在哪里? 这个类不存储它们,它只保留指向它们的指针。如果您使用相同的缓冲区来输入主题和注释字符串,那么您有很多指向这些缓冲区的指针,这可能解释了覆盖。 此外,最好在结构中添加构造函数,并根据类型将成员初始化为NULL或无效值。这样你就不必担心主代码中的这一部分了。 如果你实际上没有将所有东西存储在一些外部容器中,我建议你修改你的结构并让它们可以存储数据,并在结构实例被销毁时删除它们。在这种情况下,更好的想法是使用std容器(如std :: string)进行字符串存储,使用std :: list来实现没有指针的线性列表。