C++: syntax for accessing member struct from pointer to class

后端 未结 5 1893
醉话见心
醉话见心 2021-01-18 01:16

I\'m trying to access a member structs variables, but I can\'t seem to get the syntax right. The two compile errors pr. access are: error C2274: \'function-style cast\' : i

相关标签:
5条回答
  • 2021-01-18 01:36

    You only define a struct there, not allocate one. Try this:

    class Foo{
    public:
        struct Bar{
            int otherdata;
        } mybar;
        int somedata;
    };
    
    int main(){
        Foo foo;
        foo.mybar.otherdata = 5;
    
        cout << foo.mybar.otherdata;
    
        return 0;
    }
    

    If you want to reuse the struct in other classes, you can also define the struct outside:

    struct Bar {
      int otherdata;
    };
    
    class Foo {
    public:
        Bar mybar;
        int somedata;
    }
    
    0 讨论(0)
  • 2021-01-18 01:36

    You are only declaring Foo::Bar but you don't instantiate it (not sure if that's the correct terminology)

    See here for usage:

    #include <iostream>
    
    using namespace std;
    
    class Foo
    {
        public:
        struct Bar
        {
            int otherdata;
        };
        Bar bar;
        int somedata;
    };
    
    int main(){
        Foo::Bar bar;
        bar.otherdata = 6;
        cout << bar.otherdata << endl;
    
        Foo foo;
        //foo.Bar.otherdata = 5;
        foo.bar.otherdata = 5;
    
        //cout << foo.Bar.otherdata;
        cout << foo.bar.otherdata << endl;
    
        return 0;
    }
    
    0 讨论(0)
  • 2021-01-18 01:42

    Bar is inner structure defined inside Foo. Creation of Foo object does not implicitly create the Bar's members. You need to explicitly create the object of Bar using Foo::Bar syntax.

    Foo foo;
    Foo::Bar fooBar;
    fooBar.otherdata = 5;
    cout << fooBar.otherdata;
    

    Otherwise,

    Create the Bar instance as member in Foo class.

    class Foo{
    public:
        struct Bar{
            int otherdata;
        };
        int somedata;
        Bar myBar;  //Now, Foo has Bar's instance as member
    
    };
    
     Foo foo;
     foo.myBar.otherdata = 5;
    
    0 讨论(0)
  • 2021-01-18 01:52
    struct Bar{
            int otherdata;
        };
    

    Here you have just defined a structure but not created any object of it. Hence when you say foo.Bar.otherdata = 5; it is compiler error. Create a object of struct Bar like Bar m_bar; and then use Foo.m_bar.otherdata = 5;

    0 讨论(0)
  • 2021-01-18 01:58

    You create a nested structure, but you never create any instances of it within the class. You need to say something like:

    class Foo{
    public:
        struct Bar{
            int otherdata;
        };
        Bar bar;
        int somedata;
    };
    

    You can then say:

    foo.bar.otherdata = 5;
    
    0 讨论(0)
提交回复
热议问题