3 arguments expected, 0 provided

trying to print a concatenation through a vector of objects(my students class)

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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
//Header File

#ifndef CLASSES_H
#define CLASSES_H

#include <iostream>
#include <string>

using namespace std;

class Students
{

	public:
	
		//constructor
		Students();
		
		//overload constructor
		Students(int, string, string);
		
		//destructor
		~Students();
		
		//accessors
		string getId(string, string, string);
		
		string getfName();
		
		string getlName();
		
		//mutators
		void setId(int);
		
		void setfName(string);
		
		void setlName(string);
		
	protected:
	
		int id;
		
	private:
	
		string fName;
		string lName;
};

//Classes.cpp - prototype file

#include "Classes.h"

Students::Students()
{
	int newId = 0;
};

Students::Students(int id, string fName, string lName)
{
	int newId = id;
	string newfName = fName;
	string newlName = lName;
};

Students::~Students()
{

};

string Students::getId(string newId, string newfName, string newlName)
{
	string newID = newId + ", ";
	newID = newID + newfName;
	newID = newID + ", ";
	newID = newID + newlName;
	
	return newID;
};

string Students::getfName()
{
	return fName;
};

string Students::getlName()
{
	return lName;
};

void Students::setId(int id)
{
	int newId = id;
	/*string newID = id + ", ";
	newID = newID + fName;
	newID = newID + ", ";
	newID = newID + lName;*/
};

void Students::setfName(string fName)
{
	string newfName = fName;
};

void Students::setlName(string lName)
{
	string newlName = lName;
};
//main
#include <iostream>
#include <string>
#include <vector>
#include "Classes.h"

using namespace std;

//fills in class vector
void fillClass(vector<Students>&);

//prints the info of students
void printClass(vector<Students>&);

int main()
{

	vector<Students> class1;
	
	int id;
	string fName;
	string lName;
	string choice;
	cin >> choice;
	
	while(choice != "quit")
	{
		cout << "tables> ";
		
		if(choice == "students")
		{
			string operation;
			cin >> operation;
			
			if(operation == "add")
			{
				fillClass(class1);
			};
			if(operation == "display")
			{
				printClass(class1);
			};
		};	
	return 0;	
	};
};	

void fillClass(vector<Students>& Class1)
{
	int id;
	string fName;
	string lName;
	
	cin >> id;
	cin >> fName;
	cin >> lName;
	
	Students newStudents(id, fName, lName);
	Class1.push_back(newStudents);
};

void printClass(vector<Students>& Class1)
{
	unsigned int size = Class1.size();
	
	for(unsigned int i = 0; i < size; i++)
	{
		cout << "( )" << Class1[i].getId() << endl;
		cout << endl;
	}
};
1
2
3
string getId(string, string, string);
//...
cout << "( )" << Class1[i].getId() << endl;
You forgot to pass 3 strings as promised.
so,

.....getId(newID, newfName, newlName) << endl; ?
whilst minipaa has answered your question, I don't think your design is right. Neither is the constructor implementation:

1
2
3
4
5
6
Students::Students(int id, string fName, string lName)
{
	int newId = id;
	string newfName = fName;
	string newlName = lName;
};

you pass in variables into a constructor to store them with your object, but here you are just assigning them to local variables (which will be destroyed when it goes out of scope).
if you assign these to member variables then you would not have to pass anything into your getID() method.

you've correctly declared these in your class:
1
2
3
4
5
private:
	
		string fName;
		string lName;


but don't set them correctly in your constructor.
ok so i should get rid of all the changing around of the various variable and stick with the original 3(id, fname, lname)

where would i would to implement the concatenation?
do i create another function?
do i do it inside of a object in the class already?

Im new to vectors and im not fantastic with passing of thngs
keep this the same:
1
2
3
4
5
6
7
8
	protected:
	
		int id;
		
	private:
	
		string fName;
		string lName;

in your class definition.
and change your ctor to something like this:
1
2
3
4
5
6
7
8
9
10
11
Students::Students(int newId, string newFname, string newLName)
{
	id= newId;
	fName= newFname;
	Name= newLName;
        // now you have saved the variables away in your class variable
};

then you can write a concantenate function in your Students class, and call it where you want to.



edit:
and as a side note, I'd rename your class to Student, as each object is information for just one student. But I wouldn't worry about that too much.
Last edited on
Thank Yall for the help!
I think I will be able to get it to work properly now. :)
Topic archived. No new replies allowed.