9

我正在尝试访问成员结构变量,但我似乎无法获得正确的语法。这两个编译错误pr。访问是:错误 C2274:“函数样式转换”:作为“。”的右侧是非法的 运算符错误 C2228:“.otherdata”左侧必须有类/结构/联合我尝试了各种更改,但没有成功。

#include <iostream>

using std::cout;

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

int main(){
    Foo foo;
    foo.Bar.otherdata = 5;

    cout << foo.Bar.otherdata;

    return 0;
}
4

5 回答 5

17

您只在那里定义一个结构,而不是分配一个。试试这个:

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

int main(){
    Foo foo;
    foo.mybar.otherdata = 5;

    cout << foo.mybar.otherdata;

    return 0;
}

如果要在其他类中复用该结构,也可以在外面定义该结构:

struct Bar {
  int otherdata;
};

class Foo {
public:
    Bar mybar;
    int somedata;
}
于 2009-05-27T10:56:52.800 回答
9

Bar是内部定义的内部结构Foo。对象的创建Foo不会隐式创建Bar的成员。您需要使用Foo::Bar语法显式创建 Bar 的对象。

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

除此以外,

创建 Bar 实例作为Foo类中的成员。

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;
于 2009-05-27T10:57:41.393 回答
5

您创建了一个嵌套结构,但您从未在类中创建它的任何实例。你需要这样说:

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

然后你可以说:

foo.bar.otherdata = 5;
于 2009-05-27T10:58:05.217 回答
1

你只是声明 Foo::Bar 但你没有实例化它(不确定这是否是正确的术语)

用法见这里:

#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;
}
于 2009-05-27T11:00:11.437 回答
0
struct Bar{
        int otherdata;
    };

在这里,您刚刚定义了一个结构,但没有创建它的任何对象。因此,当您说foo.Bar.otherdata = 5;这是编译器错误时。创建一个类似 struct Bar 的对象,Bar m_bar;然后使用Foo.m_bar.otherdata = 5;

于 2009-05-27T11:00:20.610 回答