私は次の継承を持っています:
Size_(基本クラス) ---->Size2_ -------> Size3_
コンストラクターを呼び出すとき:
Size3_<int> a(2,2,1);
Size3_<int> b(3,3,1);
Size3_<double> c(1,1,0);
Size3_<double> out=(Size3_<double>(b-a))
CPPUNIT_ASSERT(out==c);
次のコンパイラの問題 (g++) が発生しています。
SteerableTests.cpp: In member function ‘void SteerableTests::testsize3()’:
SteerableTests.cpp:22:34: error: call of overloaded ‘Size3_(Size3_<int>)’ is ambiguous
SteerableTests.cpp:22:34: note: candidates are:
Size3.h:107:2: note: Size3_<Tp>::Size3_(const cv::Size_<_Tp>&) [with Tp = double]
Size3.h:105:2: note: Size3_<Tp>::Size3_(const Size2_<Tp>&) [with Tp = double]
Size3.h:100:2: note: Size3_<Tp>::Size3_(const Size3_<Tp>&) [with Tp = double, Size3_<Tp> = Size3_<double>]
したがって、継承されたオブジェクトもベース オブジェクトと見なされます。継承段階で最も低いものを選択するように g++ コンパイラに指示する方法は? ただし、Visual Studio では機能します。
P/S: コンストラクターのリストは次のとおりです。
Size3_(const Size3_& sz);
Size3_(const Size2_<Tp>& sz2);
Size3_(const Size_<Tp> & cvsz);