0

私は2つのクラス(可能な限り単純な自発的なもの)を持っており、次のことに取り組んでQtMac OS Xます:

//Class A
class A
{
protected:
    int getX(){return _x;};
private:
    int _x;
};

//Class B
class B : A
{
    void method(){qDebug() << this->getX();}
};

そして、コンパイラはスローします:

エラー: 'getX' は 'A' のプライベート メンバーです

何か不足していますか?私は試してみました:

qDebug() << this->A::getX();

どちらもうまくいきません!

4

6 に答える 6

6

When you don't specify the type of inheritance the default is taken as private.

In private inheritance,

Base Class' public members are private.

From standard docs, 11.2.2

基本クラスに access-specifier がない場合、派生クラスが class-key struct で定義されている場合は public と見なされ、クラスが class-key class で定義されている場合は private と見なされます

于 2013-05-30T08:59:31.553 に答える
3

クラスを別のクラスから継承する場合、継承のモードについて言及する必要があります。したがって、次のように宣言する必要があります

class B: public A

その後、エラーは発生しません

于 2013-05-30T08:57:08.760 に答える
1

コードは次のようになります。

class A {
    protected:
        int getX() { return _x; }

    private:
        int _x;
};

//Class B
class B : public A  {
    void method() { this->getX(); }
};

それらは多くのエラーでした:

  • class B: public A;
  • this->getX();
  • クラス宣言の後のカンマ
于 2013-05-30T08:57:12.220 に答える
1

これを試して:

//Class A
class A
{
protected:
    int getX(){return _x};
private:
    int _x;
};

//Class B
class B : public A
{
    void method(){qDebug() << this->getX();}
};

キーワードを忘れました。ポインターとしてpublic使用せず、クラスの最後に を忘れました。this;

于 2013-05-30T08:58:26.063 に答える
0

あなたが忘れてしまった ; あなたのゲッターリターンで

int getX() { return _x; };
于 2013-05-30T08:56:46.027 に答える