Я понимаю, что приведенный ниже код приведет к ошибке сегментации, потому что в Cstr A, B :: SYMBOL еще не был инициализирован. Но почему?
В действительности, A - это объект, который служит картой, которая отображает СИМВОЛЫ классов, таких как B, в соответствующие им идентификаторы. C хранит это отображение (A) статично, так что оно может предоставить отображение в виде функции класса.
Основная функция A - служить картой для C, которая инициализируется при запуске. Как мне сделать это без ошибки сегментации, при условии, что я все еще могу использовать B :: ID и B :: SYMBOL в коде (без #define pls)?
(пс. Предположим, я включил охрану включения)
//A.h
#include "B.h"
class A
{
public:
A()
{
std::cout<<B::ID<<std::endl;
std::cout<<B::SYMBOL<<std::endl;
}
};
//B.h
class B
{
public:
static const int ID;
static const std::string SYMBOL;
}
//B.cpp
#include "B.h"
const int B::ID = 1;
const std::string B::SYMBOL = "B";
//C.h
#include "A.h"
class C
{
public:
static A s_A;
};
//C.cpp
#include "C.h"
A C::s_A;
//main.cpp
#include "C.h"
int main(int c, char** p)
{
}