0

我在这方面度过了最艰难的时期。我什至不再理解错误消息,因为它们太多了。我认为我的 alphaGreater() 类函数参数有问题,但谁知道呢。任何人都可以使用 mySort() 中的冒泡排序来按字母顺序排序吗?

#include <iostream>
#include <fstream>
#include <string>
#include "phoneEntry.h"
using namespace std;

void mySort(PhoneEntry arr[], int size)
{
    bool inOrder = false;
    string temp;
    for (int i = size - 1; i > 0 && !inOrder; i--)
    {
        inOrder = true;
        for (int j = 0; j < i; j++)
        {
            if(arr[j+1].alphaGreater(arr[j]))
            {
                inOrder = false;
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
};

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 << "404" << endl;
    }

    return 0;
}

电话条目标题

电话号码标题

文本排序 (http://pastebin.com/HE8Rsmbg)

我的错误...

>> g++ sort.cpp -o PhoneSort.exe
object.cpp: In function 'void mySort(PhoneEntry*, int)':
object.cpp:35:29: error: no match for 'operator=' in 'temp = *(arr + ((unsigned
int)(((unsigned int)j) * 20u)))'
object.cpp:35:29: note: candidates are:
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h:541:7: not
e: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits
, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _C
harT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, st
d::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h:541:7: not
e:   no known conversion for argument 1 from 'PhoneEntry' to 'const std::basic_s
tring<char>& {aka const std::basic_string<char>&}'
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h:549:7: not
e: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits
, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_tra
its<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Al
loc> = std::basic_string<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h:549:7: not
e:   no known conversion for argument 1 from 'PhoneEntry' to 'const char*'
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h:560:7: not
e: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits
, _Alloc>::operator=(_CharT) [with _CharT = char, _Traits = std::char_traits<cha
r>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> =
std::basic_string<char>]
c:\mingw\bin\../lib/gcc/mingw32/4.6.1/include/c++/bits/basic_string.h:560:7: not
e:   no known conversion for argument 1 from 'PhoneEntry' to 'char'
object.cpp:37:30: error: no match for 'operator=' in '*(arr + ((((unsigned int)j
) + 1u) * 20u)) = temp'
object.cpp:37:30: note: candidate is:
phoneEntry.h:12:7: note: PhoneEntry& PhoneEntry::operator=(const PhoneEntry&)
phoneEntry.h:12:7: note:   no known conversion for argument 1 from 'std::string
{aka std::basic_string<char>}' to 'const PhoneEntry&'
4

3 回答 3

2

您的arr参数包含一组PhoneEntry值。您尝试从该数组中读取一个条目并将其存储在string您写入时temp = arr[j]。您不能将 a 分配PhoneEntry给 a string。更改temp为具有可以保存PhoneEntry值的类型,即PhoneEntry

PhoneEntry temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;

更好的是,使用标题中的swap函数。<algorithm>删除temp变量并将上面的三行替换为这一行:

std::swap(arr[j], arr[j + 1]);
于 2012-02-21T22:04:06.213 回答
0

尝试

arr[j+1].alphaGreater(arr[j])

代替

arr.alphaGreater(arr[j])

但我猜是真的。

于 2012-02-21T21:57:17.217 回答
0

object.cpp:在函数'void mySort(PhoneEntry *,int)'中:object.cpp:35:29:错误:'temp = *(arr +((unsigned int)(((无符号 int)j) * 20u)))'

因此,您将 PhoneEntry 分配给temp. temp是 std::string 而 PhoneEntry 不是 - 因此是错误。

请注意,temp它仅在最内部的范围内使用,因此您应该在那里声明它,并在同一行初始化它。(一般来说,你不应该在没有初始化的情况下声明一个局部变量。)

我还建议您看看 std::swap 函数。

于 2012-02-21T22:06:04.213 回答