This is my source file written in C++.
#include<string>
#include<sstream>
#include "Lecture.hpp"
#include <iostream>
using namespace std;
Lecture::Lecture() {
capacity=5;
log = new int[capacity];
used = 0;
}
/*
* The following is copy constructor.
*/
Lecture::Lecture(Lecture& orig) {
copy(&orig);
}
/*
* This is an empty destructor
*/
Lecture::~Lecture() {
// dereference dynamic memory
}
Lecture & Lecture:: operator=(Lecture & other){
this->copy(&other);
return *this;
}
/*
* Copy method.
*/
void Lecture::copy(Lecture &other){
if(&other != this){
capacity = other.capacity;
log = new int[capacity];
used = other.used;
for(int x = 0; x < used; x++){
log[x]= other.log[x];
}
}
}
string Lecture::getLogs() {
ostringstream ans;
ans << "[";
for (int i=0; i<used-1; ++i) {
ans << log[i] <<", ";
}
if (used>0)
ans << log[used-1] << "]";
else
ans << "empty log]";
return ans.str();
}
void Lecture::addLogEntry(int b) {
if (used==capacity) {
capacity *= 2;
int* temp= new int[capacity];
for (int i=0; i<used; ++i) {
temp[i]=log[i];
}
delete[] log;
log=temp;
}
log[used]=b;
used++;
}
From copy constructor and from overloaded = operator function I am trying to invoke copy() function. It gives me the following error:
Lecture.cpp: In copy constructor `Lecture::Lecture(Lecture&)':
Lecture.cpp:26: error: no matching function for call to `Lecture::copy(Lecture*)'
Lecture.hpp:21: note: candidates are: void Lecture::copy(Lecture&)
Lecture.cpp: In member function `Lecture& Lecture::operator=(Lecture&)':
Lecture.cpp:38: error: no matching function for call to `Lecture::copy(Lecture*)'
Lecture.hpp:21: note: candidates are: void Lecture::copy(Lecture&)
make[2]: Leaving directory `/cygdrive/g/Aristotelis/C++/Assessment_2'
make[1]: Leaving directory `/cygdrive/g/Aristotelis/C++/Assessment_2'
make[2]: *** [build/Debug/Cygwin-Windows/Lecture.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
For some reasons at copy method it expects a pointer. Why is that? This is my header file:
#ifndef LECTURE_HPP
#define LECTURE_HPP
#include<string>
using namespace std;
class Lecture{
public :
Lecture(); // default constructor
Lecture(Lecture &other); // copy constructor
string getLogs();
void addLogEntry(int);
void copy(Lecture &other); // copy method
~Lecture(); // destructor
Lecture& operator=(Lecture& other); // overloading of '='
private:
int* log;
int used;
int capacity;
};
#endif /* LECTURE_HPP */
This is main method:
#include<iostream>
#include<string>
//#include "University.hpp"
#include <cmath>
#include <cstdlib>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
Lecture c1;
cout << "Information of c1: " <<c1.getLogs() << endl;
c1.addLogEntry(20);
cout << "Information of c1: " <<c1.getLogs() << endl;
Lecture c2=c1;
cout << "Information of c2: " <<c2.getLogs() << endl;
Lecture c3;
c3=c1;
cout << "Information of c3: " <<c3.getLogs() << endl;
c1.addLogEntry(-4);
c2.addLogEntry(10);
cout << "-----------------------------------------------"<< endl;
cout << "Information of c1: " <<c1.getLogs() << endl;
cout << "Information of c2: " <<c2.getLogs() << endl;
cout << "Information of c3: " <<c3.getLogs() << endl;
return 0;
}
What might be the problem?