私のクラスのいずれかでopIndexAssignのオーバーロードに問題があるようです。opIndexAssignのオーバーロード
私にはクラスがあります。このように定義されたJSObject:
alias char[] String;
...
class JSObject : Dobject
{
/*****************************************************************
* Constructors
******************************************************************/
this(Dobject dobj)
{
super(dobj) ;
}
this()
{
super(null) ;
}
this(AssociativeArray data)
{
// initiate
super(null) ;
// then populate
foreach(k, v ; data)
{
this[ k ] = v ;
}
}
public void opIndexAssign(String key , String val)
{
Value* v = new Value() ;
v.putVstring(val) ;
this.Put(key, v , DontDelete);
}
public void opIndexAssign(String key , Dobject dobj)
{
Value* v = new Value() ;
v.putVobject(dobj) ;
this.Put(key, v , DontDelete);
}
public void opIndexAssign(String key , JSObject jso)
{
Value* v = new Value() ;
v.putVobject(jso) ;
this.Put(key, v , DontDelete);
}
public Value* opIndex(String key)
{
return this.Get(key);
}
}
DobjectのスーパークラスがオーバーロードしているPUT()とget()メソッドと私はので、私はそれらにアクセスすることができ、それらをラップしようとしています
77: JSObject jso = new JSObject() ;
78: jso[ "foo" ] = "bar" ;
79:
80: JSObject jsoParent = new JSObject() ;
81: jsoParent[ "child" ] = jso ;
これはString、Stringメソッドで機能しますが、値としてJSObjectを使用しようとすると失敗します。
test2.d => test2
+ c:\dmd\dsss\bin\rebuild.exe -version=PhobosCompatibility -w -Idsss_imports\ -I. -S.\ -Ic:\dmd\dsss\include\d -Sc:\dmd\dsss\lib\ -Ic:\dmd\dsss\include\d -Sc:\dmd\dsss\lib -oqdsss_objs\D -debug -gc test2.d -oftest2
test2.d(81): Error: function dmdscripttest.JSObject.opIndexAssign (char[],char[]) does not match parameter types (JSObject,char[5u])
test2.d(81): Error: cannot implicitly convert expression (jso) of type dmdscripttest.JSObject to char[]
test2.d(81): Error: cannot implicitly convert expression ("child") of type char[5u] to dmdscripttest.JSObject
Error: Command failed, aborting.
Command c:\dmd\dsss\bin\rebuild.exe returned with code 1, aborting.
私は間違っていることに少し迷っています。これは、コンパイラがopIndexAssign(String、JSObject)メソッドの代わりにopIndexAssign(String、String)に適合するようにキャストしようとするようなものです。
opIndexAssign関数を誤って定義しましたか?事前に
おかげで、
あなたは 'string'(小文字に注意してください)エイリアスが既に存在することを知っています(ただし' immutable char [] 'にエイリアスされています) –
はい、私はそれもどこかで読んでいるようです。しかし、私が試してみると、それはそれについて文句を言うようです。私はタンゴを使用しているからでしょうか? – Frederik
確かに私は確信していませんが、それはphobosのローカルかもしれません –