Ich versuche herauszufinden, warum dieser Code nicht kompiliert, wenn Sie auf das Array von std::set
namens asdf zugreifen. Ohne die Funktion getItem kompiliert der Code jedoch, wenn Sie in diesem Beispiel versuchen, auf ein Element von asdf zuzugreifen, z. B. Index 0. Der Compiler wird diesen Fehler auslösen. HierArray von std :: set und Komparator
main.cpp(21): error C2440: 'return': cannot convert from 'const std::set<test *,test::compare,std::allocator<_Kty>>' to 'const std::set<test *,std::less<_Kty>,std::allocator<_Kty>> &'
with
[
_Kty=test *
]
main.cpp(21): note: Reason: cannot convert from 'const std::set<test *,test::compare,std::allocator<_Kty>>' to 'const std::set<test *,std::less<_Kty>,std::allocator<_Kty>>'
with
[
_Kty=test *
]
main.cpp(21): note: No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
ist das Beispiel:
#include <set>
struct test {
int idx;
struct compare {
bool operator()(const test* a, const test* b) {
return a->idx < b->idx;
}
};
};
class asdf123 {
public:
asdf123() {
}
const std::set<test*>& getItem() const
{
return asdf[0];
}
private:
typedef std::set<test*, test::compare> stuffType[100];
stuffType asdf;
};
int main() {
asdf123 a;
return 0;
}
Ohne den Komparator der Code funktioniert.
Vielleicht möchten Sie das erweitern: Es gibt keine implizite Konvertierung von diesen beiden Typen zu den anderen, daher die Kompilierungsfehler. – Peter
Wow, wie habe ich vermisst, dass sie nicht übereinstimmende Typen hatten? Ich glaube, ich war mehr darauf aus, herauszufinden, was der kryptische Compilerfehler war. –
@BrandanTylerLasley Es gibt immer noch Hinweise in der Fehlermeldung, vor allem die beiden Typen, die nicht konvertiert werden konnten. – songyuanyao