Linked list: Array problem

The point of this program is to take information from a text file (consisting of several sets of data, each set including a word not bigger than 30 characters and an integer)

I kept getting the error

cpp(134) : error C2440: '=' : cannot convert from 'char []' to 'char [30]'

I tried to fix this by making a typedef of my array, but it didn't seem to help. I don't know why it's not working, shouldn't typedef bind "tempname" to an array of 30 characters and thus eliminate any possible conversion?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <fstream>
#include <cstddef>

using namespace std;

struct node;

typedef node* link;

struct node
{
	char name[30];
	long ID;
	link next;
};

typedef char element[30];

class list
{
private:
	link head; // I think link referrs to the head in the prompt
	int listsize;
public:
	list();
	//void facepalm
	void fileopen(ifstream & sourcefile, char fname[20]); //fname[20] because it's a new array, otherwise it can be of variable size.
	bool readfile(ifstream & sourcefile, char fname[], long &ID); // gets a name and checks to see if it's the end of the file
	void headbuild(element, long & ID);
	link nodebuild(element, long & ID);
	void headnext(link);
	void printlist();
	void sortlist();
};


	list set;
	

int main()
{
	ifstream sourcefile;


	set.fileopen(sourcefile, "a9.txt");

	cout << "File I/O testing on" << endl;

	element tempname;
	long tempID;

	if(!(set.readfile(sourcefile, tempname, tempID)))
	{
		cout << "list is empty" << endl;
		return 0;
	}

	set.headbuild(tempname, tempID);


	if(!(set.readfile(sourcefile, tempname, tempID)))
	{
		cout << "one item present" << endl;
		return 0;
	}
	
	link tempnext = set.nodebuild(tempname, tempID);

	set.headnext(tempnext);

	link currnode = tempnext;

	while(set.readfile(sourcefile, tempname, tempID))
	{
		tempnext = set.nodebuild(tempname, tempID);
		currnode -> next = tempnext;

		currnode = tempnext;
	}
	

	//list::printlist();
	//link::sortlist();

	return 0;
}

list::list()
{
	list::head = NULL;
	listsize = 0;
}

void list::fileopen(ifstream &sourcefile, char fname[20])
{
	sourcefile.open(fname);
	if (!sourcefile)
	{
		cout << "File does not exist" << endl;
		return;
	}
}

bool list::readfile(ifstream &sourcefile, element tempname, long &tempID)
{
	char reader;
	int count = 0;

	sourcefile.get(reader);

	if (!sourcefile)
	{
		return false;
	}

	while(reader != ' ')
	{
		cout << reader;
		tempname[count] = reader;
		sourcefile.get(reader);
	}

	sourcefile >> tempID;
	cout << ' ' << tempID;
	cout << endl;

	return true;
}

void list::headbuild(element tempname, long &tempID)
{
	set.head = new node;
	set.head -> name = tempname;
	set.head -> ID = tempID;
	set.listsize++;
	return;
}

link list::nodebuild(element tempname, long &tempID)
{
	link templink = new node;
	templink -> name = tempname;
	templink -> ID = tempID;
	set.listsize++;
	return templink;
}

void list::headnext(link tempnext)
{
	set.head -> next = tempnext;

}
Last edited on
1) You cannot assign arrays. You can only assign individual variables/objects. Arrays are multiple variables/objects.

2) Screw char arrays anyway. This is C++, use std::string. Replace all your char arrays with strings and your problems will disappear and you'll have no risk of buffer overflows.

3) If you must stick with char arrays, you can copy strings with the strcpy() function:

1
2
3
4
5
6
char dest[30];
char src[] = "wooo";

// copy 'src' to 'dest'
//dest = src;  // doesn't work
strcpy(dest,src);  // works 
Last edited on
Thanks! That worked

I didn't want to use char arrays. Every program in this class requires the usage of char arrays instead of strings (what is this, 1996?).


I don't like how they told me to form the link list, either... it's kind of backwards.

If it were me, I'd make the link to the node, THEN build the node, then make another new node and repeat. It makes no sense to make the node then link it backwards to the last node.
Topic archived. No new replies allowed.