Peu importe ce que je fais, je peux sembler accéder à x même s'il est implémenté presque de la même manière que y. Je ne suis pas sûr Si c'est une sorte de problème d'accès à la mémoire. Le programme se casse au premier accès de x sans erreurs ou avertissements de compilation. L'appel dans la CPU fonctionne correctement si x n'est pas présent. Toute aide est merveilleuse.Le blocage du programme lors de l'accès à un membre struct spécifique
ESys.h
#pragma once
namespace ESYS
{
struct InterconnectI
{
int y;
std::vector<uint8_t>& Ip;
std::vector<uint8_t>& Ir;
InterconnectI(std::vector<uint8_t>& p, std::vector<uint8_t>& r);
~InterconnectI(){};
void hi(int n);
};
struct CPUI
{
int x;
CPUI();
~CPUI(){};
void step(InterconnectI* i);
};
struct SystemI
{
CPUI* CPU;
InterconnectI* Interconnect;
SystemI(std::vector<uint8_t>& p, std::vector<uint8_t>& r);
void Step();
};
}
ESys.cpp
#include "stdafx.h"
#include "ESys.h"
namespace ESYS
{
InterconnectI::InterconnectI(std::vector<uint8_t>& p, std::vector<uint8_t>& r) : Ip(p), Ir(r)
{
y = 0;
}
void InterconnectI::hi(int n)
{
std::cout << "Interconnect " << n << std::endl;
}
CPUI::CPUI()
{
x = 5;
}
void CPUI::step(InterconnectI* i)
{
std::cout << "Step CPU -> " x; //Accessing doesn't work...
i->hi(x); //Passing doesn't work...
}
SystemI::SystemI(std::vector<uint8_t>& p, std::vector<uint8_t>& r)
{
CPUI* CPU = new CPUI();
InterconnectI* Interconnect = new InterconnectI(p, r);
}
void SystemI::Step()
{
CPU->step(Interconnect);
}
}
Main.cpp
#include "stdafx.h"
#include "ESys.h"
std::vector<uint8_t> pDat;
std::vector<uint8_t> rDat;
int main(int argc, const char *argv[])
{
ESYS::SystemI ESystem(pDat, rDat);
ESystem.Interconnect->y = 11;
for (;;)
{
ESystem.Step();
}
return 0;
}
Comment puis-je les initialiser? J'ai essayé tout ce que j'ai trouvé sur le sujet mais il me manque quelque chose. –
Vous pouvez simplement supprimer les définitions de variables locales: 'CPU = new CPUI(); Interconnect = nouveau InterconnectI (p, r); Bien, il est préférable d'envisager d'utiliser des pointeurs intelligents – AVK