アプリの.hファイルで2つのクラスが定義されています
class GroupElement : public QSharedData
{
public:
int Id;
int GroupIndex;
QString Title;
QSharedDataPointer<AccessDescriptor> pAccessDescriptor;
QString Owner;
};
class Class2 : public GroupElement
{
public:
QSharedDataPointer<QList<int> > Categories;
// ... many other class members
}
class3 : public QObject
{
Q_OBJECT
public:
template <class T> QSharedDataPointer<QList<T> > toTQList(QVariant qv );
//...more ....
}
別の関数で、「カテゴリ」に値を割り当てようとします
QSharedDataPointer<Class2>
Class3::afunction(QVariantMap o)
{
QSharedDataPointer<Class2> getResult(new Class2());
getResult-> Categories = toTQList<int>(o["Categories"]);
// ... more code ...
}
示されているようにコードをコンパイルすると、コンパイラは「クラスには「ref」という名前のメンバーがありません」と文句を言います。これは通常、パブリックQSharedDataを基本クラスとして追加する必要があることを示しています。ただし、この場合、Class2は、基本クラスとしてQSharedDataを持つGroupElementからすでに派生しています。QSharedDataを基本クラスとしてクラス2に追加すると、「クラス2ではアクセスできない直接ベースのQSharedData」という警告メッセージが表示されます。あいまいさを伴います。多重継承を伴う「菱形継承問題」の1つに遭遇した可能性がありますが、私はmQtまたはc++で、それを解決する方法を知るのに十分な経験がありません。
助けていただければ幸いです。