Класс, содержащий 3 объекта, которые имеют указатели друг на друга, и список инициализации для передачи ссылок на эти объекты. ОШИБКА - PullRequest
0 голосов
/ 18 января 2011

Agent.h: // # include "Genetics.h" "Sensors.h" "Effectors.h"

class C_Agent
{
public:

    C_Agent();

    C_Genome Genome;
    C_Sensors Sensors;
    C_Effectors Effectors;
    s_agentParameters parameters; 
}; 

Agent.cpp: // # include "Agent.h"

C_Agent::C_Agent() 
: parameters(), Sensors(& parameters), Effectors(& parameters),
  Genome(& Sensors, & Effectors)
{ 
    //setup parameters
    Effectors.p_Genome = & Genome; 
}

Sensors.h: // # include "Genetics.h"

class C_Sensors
{
  public:
    s_agentParameters * p_parameters;
    C_sensors(s_agentParameters * p_parametersRef);
};

Sensors.cpp: // # include "Sensors.h"

C_Sensors::C_Sensors(s_agentParameters * p_parametersRef)
: p_parameters(p_parametersRef) {}

Effectors.h // # include "Genetics.h"

class C_Effectors
{
public:
    s_agentParameters * p_parameters;
    C_Genome * p_Genome;                               //forbids declaration w/ no type
    C_Effectors(s_agentParameters * p_parametersRef);
};

Effectors.cpp: // # include "Effectors.h"

C_Effectors::C_Effectors(s_agentParameters * p_parametersRef)
: p_parameters(p_parametersRef) {}

Genetics.h: // # include "Sensors.h" "Effectors.h"

class C_Genome
{
public:
    C_Sensors * p_Sensors;                             //forbids declaration w/ no type
    C_Effectors * p_Effectors;                         //forbids declaration w/ no type
    C_Genome(C_Sensors * p_C_SensorsRef, C_Effectors * p_C_EffectorsRef);
};

Genetics.cpp: // # include "Genetics.h" "Sensors.h" "Effectors.h"

C_Genome::C_Genome(C_Sensors * p_C_SensorsRef, C_Effectors * p_C_EffectorsRef)
: p_Sensors (p_C_SensorsRef),  p_Effectors (p_C_EffectorsRef) {}

Когда я пытаюсь это скомпилировать, я получаю 6 ошибок "class_name" не называет тип "и 6 ошибок" ISO c ++ запрещает объявление 'class_name' без типа " У меня также есть код в main, который пытается инициализировать некоторые объекты C_Agent.

1 Ответ

1 голос
/ 18 января 2011

Если у вас круговая зависимость, вам понадобится предварительное объявление где-нибудь хотя бы одного из имен классов.

...