J'ai struct en classe et je ne sais pas comment appeler les variables de struct, aidez-moi;)
#include <iostream>
using namespace std;
class E
{
public:
struct X
{
int v;
};
};
int main(){
E object;
object.v=10; //not work
return 0;
}
Le fait que vous déclariez votre struct B
dans class A
ne signifie pas qu'une instance de class A
possède automatiquement les propriétés de struct B
en tant que membres, cela ne signifie pas non plus qu'elle possède automatiquement une instance de struct B
en tant que membre.
Il n'y a pas de vraie relation entre les deux classes (A
et B
), à part la portée.
struct A {
struct B {
int v;
};
B inner_object;
};
int
main (int argc, char *argv[]) {
A object;
object.inner_object.v = 123;
}
Ce que vous essayez réellement de faire n'est pas clair, mais voici deux alternatives:
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;
}
Votre classe E
ne possède pas de membre de type struct X
, vous venez de définir un struct X
imbriqué (c’est-à-dire que vous avez défini un nouveau type).
Essayer:
#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;
}
Vous devriez définir la structure hors de la classe comme ceci:
#include <iostream>
using namespace std;
struct X
{
int v;
};
class E
{
public:
X var;
};
int main(){
E object;
object.var.v=10;
return 0;
}
Si vous ne donnez pas de nom à la structure, cela fonctionnera
class E
{
public:
struct
{
int v;
};
};
Sinon, écrivez X x et écrivez e.x.v