0

これらは私のクラスの属性です:

    class Addition_Struct: public Addition {
    // attributes
    struct a {
        int element;
        struct a *next;
    };
    struct b {
        int element;
        struct b *next;
    };
    struct outcome {
        int element;
        struct outcome *next;
    };
    struct a a_data;
    struct b b_data;
    struct outcome outcome_data;
// methods
a convertToStackA(int); // everything is right with this line

.cpp ファイル内からそれらを呼び出すにはどうすればよいですか? 構文を使用this->aすると、「型名は許可されていません」が返されます。メソッドの戻り値として使用a*すると、「識別子は許可されていません」、および「宣言は...と互換性がありません」と表示されます。

.cpp ファイル:

a* Addition_Struct::convertToStackA(int number)
{
   // identifier "a" is undefined, and declaration is incompatible
}
4

3 に答える 3

2

これ:

class Addition_Struct: public Addition {
// attributes
    typedef struct a {
        int element;
        struct a *next;
    } a;
};

という名前の型のみを定義しAddition_Struct::aます。aでアクセスできるメンバーがありませんthis-a。を削除しtypedefて、必要なメンバーを取得します。

編集

指定したメソッド定義はインラインではありません (クラス定義の外にあります)。したがって、戻り値の型には完全なスコープの型名を使用する必要があります。

Addition_Struct::a* Addition_Struct::convertToStackA(int number)
{

}

コンパイラは type を認識しますが、 type を認識しAddition_Struct::aないためaです。

于 2013-04-14T09:03:59.267 に答える
1

クラス内からは、a. クラス外からは、完全修飾名を使用しAddition_Struct::aます。

ところで、これはC++なので、そのまま使用できます

struct a {
    int element;
    a *next;
};

typedef なしで。

于 2013-04-14T09:05:28.900 に答える
0

あなたの例では、構造体のみを宣言したため、Addition_Struct には 3 つの構造体が定義されていますが、データ メンバーはありません。次のようなものを追加する必要があります

a a_data;
b b_data;
outcome outcome_data;

構造体宣言の後、次のようなデータ メンバーにアクセスできるようにします。

this->a_data;
this->b_data;
this->outcome_data;
于 2013-04-14T09:01:44.767 に答える