web-dev-qa-db-ja.com

クラス内の構造体

私はクラスに構造体があり、構造体から変数を呼び出す方法がわかりません、助けてください;)

#include <iostream>
using namespace std;

class E
{
public: 
    struct X
    {
        int v;
    };
};

int main(){

E object;
object.v=10; //not work 

return 0;
}
14
Wizard

クラスA内でクラスBを宣言しましたが、どのようにアクセスしますか?

struct B内でclass Aを宣言したからといって、class Aのインスタンスが自動的にメンバーとしてstruct Bのプロパティを持つことを意味するわけではなく、メンバーとしてのstruct Bのインスタンス。

スコープのほかに、2つのクラス(AB)の間に真の関係はありません。


struct A { 
  struct B { 
    int v;
  };  

  B inner_object;
};

int
main (int argc, char *argv[]) {
  A object;
    object.inner_object.v = 123;
}
36

実際に何を達成しようとしているのかは明確ではありませんが、2つの選択肢があります。

class E
{
public:
    struct X
    {
        int v;
    };

    // 1. (a) Instantiate an 'X' within 'E':
    X x;
};

int main()
{
    // 1. (b) Modify the 'x' within an 'E':
    E e;
    e.x.v = 9;

    // 2. Instantiate an 'X' outside 'E':
    E::X x;
    x.v = 10;
}
10
Johnsyweb

Eクラスにはstruct X型のメンバーがありません。ネストされたstruct Xを定義しました(つまり、新しい型を定義しました)。

試してください:

#include <iostream>

class E
{
    public: 
    struct X { int v; };
    X x; // an instance of `struct X`
};

int main(){

    E object;
    object.x.v = 1;

    return 0;
}
2
Mat

次のように、クラスから構造体を定義する必要があります。

#include <iostream>
using namespace std;
struct X
{
        int v;
};
class E
{
public: 
      X var;
};

int main(){

E object;
object.var.v=10; 

return 0;
}
1
geniaz1

構造体に名前を付けない場合は機能します

class E
{
public: 
    struct
    {
        int v;
    };
};

それ以外の場合は、X xを記述し、e.x.vを記述します

0
user34537