Выражение должно иметь тип класса - C ++ / CLI - PullRequest
0 голосов
/ 04 мая 2020

Итак, у меня есть этот код, который я получил от здесь , у кого-то уже был этот тип ошибки, но это не помогло исправить в моем случае ( статья ):

using namespace System::Collections;
using namespace System::Windows::Forms;
int ListViewColumnSorter::Compare(System::Object^ x, System::Object^ y)
{
    int compareResult;
    ListViewItem^ listviewX;
    ListViewItem^ listviewY;

    // Cast the objects to be compared to ListViewItem objects
    listviewX = static_cast<ListViewItem^>(x);
    listviewY = static_cast<ListViewItem^>(y);

        // Compare the two items
    compareResult = ObjectCompare->Compare(listviewX->SubItems[ColumnToSort].Text,
        listviewY->SubItems[ColumnToSort].Text);

    // Calculate correct return value based on object comparison
    if (OrderOfSort == System::Windows::Forms::SortOrder::Ascending)
    {
        // Ascending sort is selected, return normal result of compare operation
        return compareResult;
    }
    else if (OrderOfSort == System::Windows::Forms::SortOrder::Descending)
    {
        // Descending sort is selected, return negative result of compare operation
        return (-compareResult);
    }
    else
    {
        // Return '0' to indicate they are equal
        return 0;
    }
}

Однако в этой строке выдается ошибка:

compareResult = ObjectCompare->Compare(listviewX->SubItems[ColumnToSort].Text,
        listviewY->SubItems[ColumnToSort].Text);

, говорящая, что listviewX и listviewY должны иметь тип класса.

Я не знаю Не понимаю, как я правильно указываю на объект типа ListViewItem.

Есть идеи?

1 Ответ

2 голосов
/ 05 мая 2020

Сообщение об ошибке в некотором смысле вводит в заблуждение, поскольку подразумевает, что проблема связана с действительными переменными listviewX и listviewY (которые, как вы указали, равны ' hatted 'типов классов или дескрипторов).

Однако SubItems член класса ListViewItem является массивом дескрипторов классов (не необработанных классов), поэтому вам необходимо -> оператор в двух случаях этого тоже (а не оператор .).

Вот какой код вам нужен:

compareResult = ObjectCompare->Compare(listviewX->SubItems[ColumnToSort]->Text,
        listviewY->SubItems[ColumnToSort]->Text);
...