クラスのようなベクトルと[]演算子のようなマップを実装しようとしています。しかし、コンパイラからエラーメッセージが出ます(g ++とclang ++)。クラスが変換演算子も整数型に持つ場合にのみ発生することがわかりました。"変換演算子がintに存在する場合、 'operator []'のあいまいなオーバーロード
今私には2つの問題があります。最初は、なぜコンパイラが[](const std :: string &)とクラスに変換演算子をintと区別できるのか分からないということです。 2番目の...変換とインデックス演算子が必要です。誰もそれを修正する方法を知っていますか?
事前のおかげで、私からよろしく
作品:
#include <stdint.h>
#include <string>
struct Foo
{
Foo& operator[](const std::string &foo) {}
Foo& operator[](size_t index) {}
};
int main()
{
Foo f;
f["foo"];
f[2];
}
は動作しません:
#include <stdint.h>
#include <string>
struct Foo
{
operator uint32_t() {}
Foo& operator[](const std::string &foo) {}
Foo& operator[](size_t index) {}
};
int main()
{
Foo f;
f["foo"];
f[2];
}
コンパイラエラー:
main.cpp: In function 'int main()':
main.cpp:14:9: error: ambiguous overload for 'operator[]' in 'f["foo"]'
main.cpp:14:9: note: candidates are:
main.cpp:14:9: note: operator[](long int, const char*) <built-in>
main.cpp:7:7: note: Foo& Foo::operator[](const string&)
main.cpp:8:7: note: Foo& Foo::operator[](size_t) <near match>
main.cpp:8:7: note: no known conversion for argument 1 from 'const char [4]' to 'size_t {aka long unsigned int}'
「キャスト演算子」のようなものはありません。問題のオペレータは**変換**です。キャストは、コンパイラに変換を指示するためにソースコードに書き込むものです。 –
@Pete Beckerありがとうございました。 – r2p2