Hi,
I am trying to add an option for a user to enter a name into my program, and if that name exists, then the program should delete the object which it matches.
I'm using a vector, which holds base class pointers.
So I'm entering the name entered by the user into a string variable, and then looping through the vector to search for a match, but my 'getter' function is not able to compare it's return with the string variable it seems.
Here is my program:
header file (diary.h) :
main.cpp :Code:using namespace std; #include <string> class Diary { public: Diary(string mainname, string mainaddress, string mainpostcode, string maintelno, string maindetails); //Getters (Getters are used to access private or protected datamembers) : string getName() const { return m_Name; } string getAddress() const { return m_Address; } string getPostCode() const { return m_PostCode; } string getTelNo() const { return m_TelNo; } string getDetails() const { return m_Details; } //Pure Virtual getter functions for Leads class virtual string getDate() = 0; virtual string getTime() = 0; //Virtul function for adding double quotes to strings for the .csv file: virtual void addDoubleQuotes(string& m_Name,string& m_Address,string& m_PostCode,string& m_TelNo,string& m_Details) { m_Name = '\"' + m_Name + '\"'; m_Address = '\"' + m_Address + '\"'; m_PostCode = '\"' + m_PostCode + '\"'; m_TelNo = '\"' + m_TelNo + '\"'; m_Details = '\"' + m_Details + '\"'; } private: protected: string m_Name; string m_Address; string m_PostCode; string m_TelNo; string m_Details; }; Diary::Diary(string mainname, string mainaddress, string mainpostcode, string maintelno, string maindetails) { m_Name = mainname; m_Address = mainaddress; m_PostCode = mainpostcode; m_TelNo = maintelno; m_Details = maindetails; addDoubleQuotes(m_Name, m_Address, m_PostCode, m_TelNo, m_Details); } //---------------------------------------------------------------- class Leads : public Diary { public: Leads(string m_Name, string m_Address, string m_PostCode, string m_TelNo, string m_Details, string m_Date, string m_Time); //Getters: string getTime() { return m_Time; } string getDate() { return m_Date; } //Virtual function for adding double quotes to strings for the .csv file: void addDoubleQuotes(string& m_Date, string& m_Time) { m_Date = '\"' + m_Date + '\"'; m_Time = '\"' + m_Time + '\"'; } private: protected: string m_Date; string m_Time; }; Leads::Leads(string mainname, string mainaddress, string mainpostcode, string maintelno, string maindetails, string maindate, string maintime) : Diary(mainname, mainaddress, mainpostcode, maintelno, maindetails) { m_Date = maindate; m_Time = maintime; addDoubleQuotes(m_Date, m_Time); }
The compiler (Visual Studio 2005) gives the following error:Code:#include <iostream> #include <string> #include <vector> #include <fstream> #include "diary.h" using namespace std; int main () { vector<Diary *>vectorname; do{ int choice = 0; cout << "Choose one of the options below:" << endl; cout << "1) Enter a lead" << endl; cout << "2) Delete a lead" << endl; cout << "3) Exit the program" << endl; cin >> choice; cin.ignore(); switch(choice) { case 1: { cout << "You chose to enter a lead" << endl; //--------------------- //Collect the leads details //--------------------- string mainname; cout << "Name? " << endl; getline (cin, mainname); string mainaddress; cout << "Address? " << endl; getline (cin, mainaddress); string mainpostcode; cout << "Post Code? " << endl; getline (cin, mainpostcode); string maintelno; cout << "Telephone Number? " << endl; getline (cin, maintelno); string maindetails; cout << "Details? " << endl; getline (cin, maindetails); string maindate; cout << "Date ? DDMMYY " << endl; getline (cin, maindate); string maintime; cout << "Time? 24hr HHMM " << endl; getline (cin, maintime); cout << "All questions asked" << endl; try { Leads *ptr = new Leads(mainname, mainaddress, mainpostcode, maintelno, maindetails, maindate, maintime); vectorname.push_back( ptr ); } catch (bad_alloc& ba) { cerr << "bad_alloc caught: " << ba.what() << endl; } break; } case 2: { cout << "You chose to delete a lead" << endl; //--------------------- //Delete a 'Lead' //--------------------- string leadToDelete; cout << "Enter the name of the lead to delete" << endl; getline (cin, leadToDelete); for(unsigned int a = 0; a<vectorname.size(); a++) { if(vectorname[a]->getName == leadToDelete) { cout <<"Found the lead you want to delete" << endl; } } cout << "The lead has been deleted" << endl; } case 3: { cout << "You chose to exit the program" << endl; ofstream streamname("database.csv"); if(!streamname) { cout << "Cannot open file" << endl; return 1; } for(unsigned int a = 0; a<vectorname.size(); a++) { streamname << vectorname[a]->getName() << "," << vectorname[a]->getAddress() << "," << vectorname[a]->getPostCode() << "," << vectorname[a]->getTelNo() << "," << vectorname[a]->getDetails() << "," << vectorname[a]->getDate() << "," << vectorname[a]->getTime() << endl; } for(unsigned int a = 0; a<vectorname.size(); a++) { delete vectorname[a]; } streamname.close(); exit(0); break; } } } while(true); system ("PAUSE"); return 0; }
I thought this would work, as the 'getter' returns a string, but I guess not.error C2784: 'bool std:perator ==(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'overloaded-function'
If anyone could help explain my problem in a simple to understand way I would really appreciate it.
Many thanks!
Swerve![]()



LinkBack URL
About LinkBacks
perator ==(const std::vector<_Ty,_Alloc> &,const std::vector<_Ty,_Alloc> &)' : could not deduce template argument for 'const std::vector<_Ty,_Alloc> &' from 'overloaded-function'



