struct in class

前端 未结 6 1132
梦毁少年i
梦毁少年i 2020-12-30 05:09

I have struct in class and not know how to call variables from struct, please help ;)

#include 
using namespace std;

class E
{
public: 
            


        
相关标签:
6条回答
  • 2020-12-30 05:50

    I'd like to add another use case for an internal struct/class and its usability. An inner struct is often used to declare a data only member of a class that packs together relevant information and as such we can enclose it all in a struct instead of loose data members lying around.

    The inner struct/class is but a data only compartment, ie it has no functions (except maybe constructors).

    #include <iostream>
    
    class E
    {
        // E functions..
    public:
        struct X
        {
            int v;
            // X variables..
        } x;
        // E variables..
    };
    
    int main()
    {
        E e;
        e.x.v = 9;
        std::cout << e.x.v << '\n';
        
        E e2{5};
        std::cout << e2.x.v << '\n';
    
        // You can instantiate an X outside E like so:
        //E::X xOut{24};
        //std::cout << xOut.v << '\n';
        // But you shouldn't want to in this scenario.
        // X is only a data member (containing other data members)
        // for use only inside the internal operations of E
        // just like the other E's data members
    }
    

    This practice is widely used in graphics, where the inner struct will be sent as a Constant Buffer to HLSL. But I find it neat and useful in many cases.

    0 讨论(0)
  • 2020-12-30 05:53

    Your E class doesn't have a member of type struct X, you've just defined a nested struct X in there (i.e. you've defined a new type).

    Try:

    #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;
    }
    
    0 讨论(0)
  • 2020-12-30 05:55

    I declared class B inside class A, how do I access it?

    Just because you declare your struct B inside class A does not mean that an instance of class A automatically has the properties of struct B as members, nor does it mean that it automatically has an instance of struct B as a member.

    There is no true relation between the two classes (A and B), besides scoping.


    struct A { 
      struct B { 
        int v;
      };  
    
      B inner_object;
    };
    
    int
    main (int argc, char *argv[]) {
      A object;
        object.inner_object.v = 123;
    }
    
    0 讨论(0)
  • 2020-12-30 05:58

    If you give the struct no name it will work

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

    Otherwise write X x and write e.x.v

    0 讨论(0)
  • 2020-12-30 06:00

    It's not clear what you're actually trying to achieve, but here are two alternatives:

    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;
    }
    
    0 讨论(0)
  • 2020-12-30 06:00

    You should define the struct out of the class like this:

    #include <iostream>
    using namespace std;
    struct X
    {
            int v;
    };
    class E
    {
    public: 
          X var;
    };
    
    int main(){
    
    E object;
    object.var.v=10; 
    
    return 0;
    }
    
    0 讨论(0)
提交回复
热议问题