Структура в классе
У меня есть структура в классе и не знаю, как вызвать переменные из struct, пожалуйста, помогите;)
#include <iostream>
using namespace std;
class E
{
public:
struct X
{
int v;
};
};
int main(){
E object;
object.v=10; //not work
return 0;
}
Ответы
Ответ 1
Я объявил класс B внутри класса A, как мне получить к нему доступ?
Просто потому, что вы объявляете свой struct B
внутри class A
, не означает, что экземпляр class A
автоматически имеет свойства struct B
в качестве членов, а также не означает, что он автоматически имеет экземпляр struct B
как член.
Не существует истинного отношения между двумя классами (A
и B
), кроме области видимости.
struct A {
struct B {
int v;
};
B inner_object;
};
int
main (int argc, char *argv[]) {
A object;
object.inner_object.v = 123;
}
Ответ 2
Не понятно, чего вы на самом деле пытаетесь достичь, но вот две альтернативы:
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;
}
Ответ 3
В вашем классе E
нет члена типа struct X
, вы только что указали там вложенный struct X
(т.е. вы определили новый тип).
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;
}
Ответ 4
Вы должны определить структуру из класса следующим образом:
#include <iostream>
using namespace std;
struct X
{
int v;
};
class E
{
public:
X var;
};
int main(){
E object;
object.var.v=10;
return 0;
}
Ответ 5
Если вы укажете имя структуры без имени, оно будет работать
class E
{
public:
struct
{
int v;
};
};
В противном случае напишите X x и напишите e.x.v