Moderators Kercyn Δημοσ. 6 Απριλίου 2016 Moderators Δημοσ. 6 Απριλίου 2016 (επεξεργασμένο) Καλησπέρα σας. Επειδή είμαι 2 ώρες πάνω απ' αυτή τη βλακεία και δε μπορώ να δω πού έχω κάνει λάθος, μήπως μπορεί κάποιος να βοηθήσει; Θέλω να κάνω specialize το std::hash για την κλάση μου και στο definition μου βγάζει ότι το EndPoint.Data είναι inaccessible. Header #pragma once /*! \file */ #include <cstdint> #include <functional> class PPairManager; class PEndPoint; namespace std { template <> struct hash<PEndPoint> { public: size_t operator()(const PEndPoint& EndPoint) const; }; } class PEndPoint final { public: PEndPoint(); PEndPoint(std::uint16_t Data_, float Value_); ~PEndPoint() = default; bool operator<(const PEndPoint& rhs) const; bool operator>(const PEndPoint& rhs) const; friend PPairManager; friend std::size_t std::hash<PEndPoint>::operator()(const PEndPoint& EndPoint) const; private: //! Owning collider ID | MinMax flag. Flag is 0 for min and 1 for max. std::uint16_t Data; //! The axis value of the endpoint. float Value; }; Τσι Πι Πι #include "PEndPoint.hpp" #include <cstdint> #include <functional> PEndPoint::PEndPoint() : Value(0.0f), Data(0) {} PEndPoint::PEndPoint(std::uint16_t Data_, float Value_) : Data(Data_), Value(Value_) {} bool PEndPoint::operator<(const PEndPoint & rhs) const { return (Value < rhs.Value); } bool PEndPoint::operator>(const PEndPoint & rhs) const { return (Value > rhs.Value); } namespace std { size_t hash<PEndPoint>::operator()(const PEndPoint& EndPoint) const { return hash<uint8_t>()(EndPoint.Data >> 1); } } Επεξ/σία 7 Απριλίου 2016 από Kercyn
moukoublen Δημοσ. 7 Απριλίου 2016 Δημοσ. 7 Απριλίου 2016 ?? Το δοκίμασα με αυτή τη μέην και δουλεύει #include <iostream> #include "PEndPoint.hpp" using namespace std; int main(int argc, char const *argv[]) { /* code */ PEndPoint p; hash<PEndPoint> h; cout << h(p) << endl; return 0; } Με Apple LLVM version 7.3.0 (clang-703.0.29) Target: x86_64-apple-darwin15.4.0 Thread model: posix
Moderators Kercyn Δημοσ. 7 Απριλίου 2016 Μέλος Moderators Δημοσ. 7 Απριλίου 2016 Αυτά τα Endpoints τα βάζω σε unordered set, και απ' ό,τι φαίνεται έπρεπε να υπάρχει και ο operator==. Τώρα που έβαλα και τον operator== δούλεψε. Ενώ είχα υπ' όψην μου να τον βάλω, είπα να κάνω πρώτα το specialization και να αφήσω τον operator για μετά, αλλά απ' ό,τι φαίνεται ήθελε να υπάρχουν και τα δύο μαζί. Ευχαριστώ που το ήλεγξες κι εσύ.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα