类中的结构

时间:2011-12-18 08:55:04

标签: c++ class struct

我在类中有结构,不知道如何从struct调用变量,请帮忙;)

#include <iostream>
using namespace std;

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

int main(){

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

return 0;
}

3 个答案:

答案 0 :(得分:10)

目前尚不清楚你实际想要实现的目标,但这里有两种选择:

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;
}

答案 1 :(得分:2)

您的E班级没有struct X类型的成员,您刚刚在那里定义了嵌套struct X(即您已定义了新类型)。< / p>

尝试:

#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 :(得分:0)

我想为内部struct / class及其可用性添加另一个用例。内部struct通常用于声明将相关信息打包在一起的类的仅数据成员,因此,我们可以将它们全部封装在struct中,而不是散乱的数据成员。

内部struct / class只是一个数据区,也就是说,它没有功能(可能不是构造函数)。

#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
}

此做法广泛用于图形,其中内部struct将作为常量缓冲区发送到HLSL。 但我发现它在许多情况下都很简洁实用。