C++ QScopedPointer是否隐藏多重继承

C++ QScopedPointer是否隐藏多重继承,c++,qt,C++,Qt,我无法访问PIMPL设计的私有部分。“当然!”你说!你应该是! 嗯,我正在写一些功能测试,所以我不在乎访问私有成员,好吗?:-) 为了切中要害,我使用QScopedPointer为私有实现设置了public类,如下所示 class CV { ... private: QScopedPointer<PrivateCV> const _d_ptr; PrivateChartView * d(); const PrivateChartView *d() const; }; Pr

我无法访问PIMPL设计的私有部分。“当然!”你说!你应该是! 嗯,我正在写一些功能测试,所以我不在乎访问私有成员,好吗?:-)

为了切中要害,我使用QScopedPointer为私有实现设置了public类,如下所示

class CV {
...
private:
  QScopedPointer<PrivateCV> const _d_ptr;
  PrivateChartView * d();
  const PrivateChartView *d() const;
};
PrivateCV * CV::d()
{ 
  return _d_ptr.data(); 
}

const PrivateCV* CV::d() const
{ 
  return _d_ptr.data(); 
}
MyTestClass似乎可以访问PrivateCV的do_something()成员函数,其获取方式如下(伪代码,obvs):

i、 e.它将称之为罚款:

pcv->do_something();
但是我无法访问Ui_CVForm(从uic生成的Ui类)上的任何内容。 Ui_CVForm(部分)如下所示:

class Ui_CVForm
{
public:
    QGridLayout *gridLayout_2;
    QGroupBox *groupBox;
    QLineEdit *lineEdit;
};
这是否与函数d()的常数有关,或者与QScopedPointer有关? 当我在简历中时,我可以毫无问题地访问PrivateCV的ui表单元素

void CV::and_another_thing()
{
  d()->lineEdit->setText("wtfa");    
}

欢迎任何指点(双关语)

好吧,这是因为某个白痴(我)在不同的库中对两个不同的类使用相同的文件名。
测试库正在为Ui_CVForm拾取一个标题,该标题不包含上面的lineEdit之类的项,而PrivateCV正在使用另一个。。。因此,没有人抱怨在编译时看不到标题。

您是否将ui表单的标题拉到您试图访问其内容的位置?要访问私有成员,您可以a)使测试类/函数成为朋友。B) 使用g++的
-fno访问控制
选项(一般来说我不推荐,但它对测试很有用)。呃,我想它可以像头一样简单。我想如果它看不到ui头,我会遇到编译问题(doffeent Ines!)。我将稍后再试。我访问的类是私有实现和公共实现的朋友(这就是为什么我可以访问d()函数)。此外,我试图访问的私有类的部分是公共的!
class Ui_CVForm
{
public:
    QGridLayout *gridLayout_2;
    QGroupBox *groupBox;
    QLineEdit *lineEdit;
};
void CV::and_another_thing()
{
  d()->lineEdit->setText("wtfa");    
}