msgstr "неверное приведение типа 'const myClass' к типу 'int'", как я могу сделать его действительным? - PullRequest
2 голосов
/ 22 февраля 2012

Я получаю ошибку об операторе возврата (или приведении) в конечной функции в следующем фрагменте из заголовка библиотеки

///////////////////////////////////////////////////////////
// class __HashMapDefaultProviderT

/**
* @internal
* @class    __HashMapDefaultProviderT
* @brief    This is an implementation of the IHashCodeProviderT interface for the HashMap class.
* @since    1.0
*/
template<class KeyType>
class __HashMapDefaultProviderT
    :   public IHashCodeProviderT<KeyType>,
    public Object
{
public:

    // Lifecycle

    /**
    * This is the default constructor for this class.
    *
    * @since     1.0
    */
    __HashMapDefaultProviderT(void) {}


    /**
    * This is the destructor for this class.
    *
    * @since     1.0
    */
    virtual ~__HashMapDefaultProviderT(void) {}


    // Operation

    /**
    * Gets the hash code of the specified object
    *
    * @since        1.0
    * @return       The hash code of the specified object
    * @see          Osp::Base::Object::GetHashCode
    */
    int GetHashCode(const KeyType& obj) const
    {
        return (int)obj;
    }


};

ошибка:

недопустимое приведение типа 'const myClass' к типу 'int'

Что это за исправление? Заголовочный файл называется FBaseColHashMapT.h

Я уже добавил operator> и operator< методы, но я не знаю, как еще получить свой класс для хеширования или как разрешить приведение, которое требуется выше, если не считать его наследование, но я бы хотелось бы узнать, смогу ли я этого избежать. Для поддержки этих двух операторов я написал:

inline int GetHashCode() const {return myIntMember/4 + clientRect.GetHashCode();}

Может быть, это может быть повторного использования здесь?

Я предоставляю myClass в качестве ключа для этого класса шаблона и int в качестве значения.

Ответы [ 2 ]

7 голосов
/ 22 февраля 2012

Очевидно, что класс ожидает, что KeyType (в вашем случае myDescriptor) будет преобразовано в int.Поэтому исправлением было бы добавить это преобразование к myDescriptor:

class myDescriptor
{
public:
  operator int() const { return (whatever the library expects, probably a hash key); }
  // ...
};
2 голосов
/ 22 февраля 2012

Либо вашему классу необходимо предоставить преобразование в int:

myClass::operator int() const {
    return myIntMember/4 + clientRect.GetHashCode();
}

... или вам нужно специализировать функцию-член GetHashCode() класса hashmap (это можно сделать в заголовке myClass, но в пространстве имен hashmap):

template<class KeyType>
inline int __HashMapDefaultProviderT::GetHashCode(const myClass& obj) const {
    return obj.myIntMember/4 + obj.clientRect.GetHashCode();
}

Я не знаком с bada, поэтому не могу сказать, какой подход ожидается. И то, и другое выглядит довольно странно.

...