我是C++的初學者,並且有關於排序類對象向量的問題。我在網上做了很多研究,但似乎無法找出答案。我的問題是,我想有多個謂詞比較函數,我可以命名,因爲我需要讓用戶能夠從菜單中選擇要排序的矢量的私有成員變量/分量。我可以通過重載操作符來獲得謂詞比較函數,但是當我嘗試命名該函數時,似乎無法在沒有大量錯誤的情況下編譯它(我將向後張貼更多在適當的代碼下面)。如何命名比較謂詞函數來排序向量
當代碼運行時,一個BookData對象的向量由讀取文本文件的函數創建。函數原型主:主
vector<BookData> createVector();
函數調用:
vector<BookData> books = createVector();
createVector函數定義:
vector<BookData> createVector()
{
const int LENGTH = 81;
char input[LENGTH];
vector<BookData> fBooks;
string vBookTitle, vIsbn, vAuthor, vPublisher, vDateAdded;
int vQtyOnHand;
double vWholesale, vRetail;
BookData *books1;
books1 = new BookData;
fstream dataFile("Serendipity.data");
if (dataFile.is_open())
{
while (!dataFile.eof())
{
dataFile.getline(input, LENGTH, '\t');
vBookTitle = input;
books1->setTitle(vBookTitle);
dataFile.getline(input, LENGTH, '\t');
vAuthor = input;
books1->setAuthor(vAuthor);
dataFile.getline(input, LENGTH, '\t');
vPublisher = input;
books1->setPub(vPublisher);
dataFile.getline(input, LENGTH, '\t');
vIsbn = input;
books1->setIsbn(vIsbn);
dataFile >> vQtyOnHand;
books1->setQty(vQtyOnHand);
dataFile >> vWholesale;
books1->setWholesale(vWholesale);
dataFile >> vRetail;
books1->setRetail(vRetail);
dataFile.ignore();
dataFile.getline(input, LENGTH);
vDateAdded = input;
books1->setDateAdded(vDateAdded);
fBooks.push_back(*books1);
}
}
return fBooks;
}
這是我的類定義文件(bookdata.h)與工作比較功能:
class BookData
{
private:
string bookTitle, isbn, author,
publisher, dateAdded;
int qtyOnHand;
double wholesale, retail;
bool empty;
public:
BookData();
bool operator< (BookData rhs);
void printVector();
void setTitle(string);
void setIsbn(string);
void setAuthor(string);
void setPub(string);
void setDateAdded(string);
void setQty(int);
void setWholesale(double);
void setRetail(double);
int isEmpty();
void insertBook();
void removeBook();
string getTitle();
string getIsbn();
string getAuthor();
string getPublisher();
string getDateAdded();
int getQtyOnHand();
double getWholesale();
double getRetail();
};
而且這是在類實現文件的工作函數(bookdata.cpp):
bool BookData::operator< (BookData rhs)
{
return qtyOnHand < rhs.qtyOnHand;
}
,這就是所謂像這樣從int main()中:
sort (books.begin(), books.end());
但是,如果我嘗試和名稱功能:
bool compare (BookData rhs);
從類定義文件中,並在類實現文件改成這樣:
bool BookData::compare (BookData rhs)
{
return qtyOnHand < rhs.qtyOnHand;
}
並在主要改變矢量排序功能,所以:
sort (books.begin(), books.end(), &BookData::compare);
我從編譯器收到一條錯誤消息:
錯誤C2064:術語不計算爲服用2個參數
功能有關我如何正確地命名/調用排序功能的任何建議?
一個合適的名字也許應該表明它是比較量在手,沒有別的東西。 - 由數量? - >'排序(books.begin(),books.end(),byQuantity)' – UncleBens
@ UncleBens-你是絕對正確的,這只是一個測試功能。一旦我把它們弄對了,我就會把它們改成更具描述性的名字。 –