0
asdfという名前のstd::set
の配列にアクセスすると、このコードがコンパイルされない理由を理解しようとしています。ただし、関数getItemがなければ、この例ではインデックス0などのasdfの要素にアクセスしようとするとコードがコンパイルされます。コンパイラはこのエラーをスローします。コードが正常に動作し、比較器なしstd :: setとcomparatorの配列
#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;
}
:ここ
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
は一例です。
拡張する必要があるかもしれません。これらのタイプのいずれかから他のタイプへの暗黙的な変換はないため、コンパイルエラーです。 – Peter
うわー、私はどのようにミスマッチタイプがあるのを見逃しましたか?私は、わかりやすいコンパイラエラーが何であるかを調べようともっと集中していたと思います。 –
@BrandanTylerLasleyエラーメッセージにはまだヒントがあります。特に、変換に失敗した2つのタイプが示されています。 – songyuanyao