我在类中有结构,不知道如何从struct调用变量,请帮忙;)
#include <iostream>
using namespace std;
class E
{
public:
struct X
{
int v;
};
};
int main(){
E object;
object.v=10; //not work
return 0;
}
答案 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。
但我发现它在许多情况下都很简洁实用。