所以我试着让一个排序函数起作用。它应该按名字排序,但如果名字相同,它应该按姓氏排序。在where inOrder = arr行上,我一直在mySort()中得到一个错误,说“在')‘令牌之前有一个意外的主表达式”。这是怎么回事,我怎么才能修复它?我需要将我的对象传递给一个单独类中的函数。我会在粘贴盒里把它们连接起来。
这是驱动程序
#include <iostream>
#include <fstream>
#include <string>
#include "phoneEntry.h"
using namespace std;
void mySort(PhoneEntry& arr, int size)
{
bool inOrder = false;
for (int i = size - 1; i > 0 && !inOrder; i--)
{
inOrder = true;
for (int j = 0; j < i; j++)
{
inOrder = arr.alphaGreater(arr&);
}
}
};
int main()
{
const int MAXNUM = 500;
PhoneEntry entry[MAXNUM];
ifstream filezilla;
filezilla.open("phone.txt");
int count = 0;
if(filezilla)
{
while(count < MAXNUM && entry[count].readEntry(filezilla))
{
count++;
}
mySort(entry&, count);
for(int i = 0; i < count; i++)
{
entry[i].writeEntry(cout) << endl;
}
}
else
{
cout << "Four Oh Four - File Not Found" << endl;
}
return 0;
}Phone Entry Header
Phone Number Header
文本排序(http://pastebin.com/HE8Rsmbg)
发布于 2012-02-21 15:40:00
您想要传递一个引用,因此必须在函数定义/声明中将参数定义为按引用调用,这已经完成了:
bool PhoneEntry::alphaGreater(const PhoneEntry& item) const;如您所见,PhoneEntry::alphaGreater接受一个常量PhoneEntry引用。所以只需使用
inOrder = arr.alphaGreater(arr);发布于 2012-02-21 16:24:22
你的代码有几处地方出了问题。第一个问题,也是编译器抱怨的一个问题,是C++中没有后缀操作符&。我不知道您到底想用它做什么,也不知道您认为它意味着什么,但它在C++中是不存在的。
第二种方法是mySort接受对单个PhoneEntry的引用;您有一个PhoneEntry数组,因此必须选择一个来传递它。除了函数的名称和传递计数这一事实之外,还表明您确实希望传递一个数组。
我不明白mySort应该做什么。它当然不会对任何东西进行排序;事实上,它似乎基本上是一个代价高昂的no-op,因为它不返回任何东西,不修改arr,也不访问或修改任何全局状态。
对于其余部分,您需要对输入进行更多的错误检查(打开是否成功等),并且您确实应该使用std::vector,而不是C风格的数组。(在某些情况下,C样式数组是合适的,但这不是其中之一。)
更根本的是,我建议你找一本好书来研究它。(我推荐Stroustrup的编程原则和使用C++的实践。)在不了解最基本的基础知识和基本语法的情况下,您无法用任何语言编写程序。
发布于 2012-02-21 16:04:49
您也可以将其作为指针进行传递
https://stackoverflow.com/questions/9373787
复制相似问题