Несколько человек уже рассказали вам о проблеме.Это больше фокусируется на решении.Тот, который я обычно одобряю, отделяет реализацию класса от определения класса.Я бы перестроил код примерно так:
#include <iostream>
using namespace std;
class Street;
class CrossStreet {
char m_chName;
Street* m_acLoS;
int m_nNoS;
static int m_nCSid;
void Init();
public:
CrossStreet();
CrossStreet(char chName);
void AddStreet(Street* const cStreet);
~CrossStreet();
friend class Street;
};
class Street {
int m_nDistance;
public:
Street(CrossStreet& cHead, CrossStreet& cTail, int nDistance);
void CreateStreet(CrossStreet& cHead, CrossStreet& cTail, int nDistance);
};
CrossStreet::CrossStreet() {
Init();
m_chName = m_nCSid;
}
CrossStreet::CrossStreet(char chName) {
Init();
m_chName = chName;
}
void CrossStreet::AddStreet(Street* const cStreet) {
m_acLoS[++m_nNoS] = cStreet;
}
CrossStreet::~CrossStreet() {
delete[] m_acList;
}
CrossStreet::void Init() {
m_nNoS = 0;
m_acLoS = 0;
m_nCSid++;
}
Street::Street(CrossStreet& cHead, CrossStreet& cTail, int nDistance) {
CreateStreet(cHead,cTail,nDistance);
}
void Street::CreateStreet(CrossStreet& cHead, CrossStreet& cTail, int nDistance) {
m_nDistance = nDistance;
cHead.AddStreet(this);
cTail.AddStreet(this);
}
Итак, основная идея здесь - это объявление класса, затем определения класса, а затем реализации функций-членов.Также обратите внимание, что я сделал CrossStreet::Init
приватным, поскольку он, очевидно, должен использоваться только членами CrossStreet
.
В качестве заключительного замечания, пожалуйста, ради Бога, выберите несколько приличных имен дляваши переменные.Единственное имя, которое вы использовали, даже наполовину значимое и читаемое, - m_nDistance
.Такие вещи, как m_chName
и m_acLos
действительно ужасны.Они очень похожи на имена, которые я придумал, когда писал диатрибы о пороках венгерской нотации и об ужасном, нечитаемом беспорядке, который можно из этого извлечь.