我想使用模板化 qsort 对结构数组进行排序

I want to sort an array of structures using templatized qsort

我有一个包含对象指针的数组。每个对象都有一个名为 name 的数据成员,类型为 string.

我想使用模板化的 qsort 函数对其进行排序。再次注意,数组中的每个元素都是指向对象的指针。 但是,我收到错误消息:

error C2227: left of '->name' must point to class/struct/union/generic type

在这一行:

return strcmp(a->name, b->name);

在编译时。

为什么会出现此错误?

这是完整代码(我使用 Visual Studio 2019):

#include <cstdlib>
#include <stdio.h>
#include <string.h>
//----------------------------------------------------------------------
class my_type {
public:
    char name[10];
    my_type(char* source) {
        strcpy(name, source); // assume data are valid
    }
};
//----------------------------------------------------------------------
template <typename a_type>
int compare(const void* pa, const void* pb)
{
    a_type* a = (*(a_type**)pa);
    a_type* b = (*(a_type**)pb);

    return strcmp(a->name, b->name);
}
//----------------------------------------------------------------------
int main()
{
    my_type**a;
    int n = 5;

    a = new my_type * [n]; // allocate the array.

    for (int i = 0; i < n; i++) {
        char buf[100];
        _itoa(i, buf, 10);
        a[i] = new my_type(buf); // allocate each element of the array.
    }

    qsort(a, n - 1, sizeof(a[0]), compare<my_type*>); // sort them

    for (int i = 0; i < n; i++)// print the sorted elements
        printf("%s ", a[i]->name);

    for (int i = 0; i < n; i++)
        delete a[i]; // delete each element
    delete[] a; // delete array

    getchar();
}
//----------------------------------------------------------------------

name 是一个 C 字符串。有什么理由不使用 stdlib 中的 c++ 字符串吗?您将无法使用模板编译代码?或者 std::sort ?

不管怎样,问题是你在调用模板的时候,把类型定义为指针。你最终得到一个指向指针的指针,它没有字段“name”。