Я пытался объявить две статические переменные в двух разных .cpp, одна пытается использовать другую во время инициализации (например, класс B -> класс A).Код может быть скомпилирован, если у меня есть main.cpp, который включает в себя ах и бх. Он завис во время выполнения (ошибка сегментации (ядро сброшено)).Я понимаю, что это проблема с инициализацией статической переменной, статическая переменная A еще может быть инициализирована во время инициализации статического объекта B.
Могу ли я спросить, как правильно решить проблему такого рода, изменивкакой код или какой-либо шаблон проектирования помогли бы?
Я видел пост, в котором говорилось, что "constexpr" используется для инициализации A :: инициализации во время компиляции, я засосал синтаксическую ошибку.
static constexpr std::string a; // in a.h
constexpr std::string A::a="AAA"; // in a.cpp
ошибки:
a.h:7:34: error: constexpr static data member ‘a’ must have an initializer
static constexpr std::string a;
a.cpp:4:26: error: redeclaration ‘A::a’ differs in ‘constexpr’
constexpr std::string A::a="AAA";
Полный код указан ниже: ах
#include <string>
using namespace std;
class A
{
public:
static const std::string a;
A();
~A();
};
a.cpp
#include "a.h"
using namespace std;
const std::string A::a("AAA");
A::A(){};
A::~A(){};
чч
#include <string>
using namespace std;
class B
{
public:
B(const std::string& a );
~B();
};
b.cpp
#include "b.h"
#include "a.h"
#include <iostream>
static const B b(A::a);
B::B(const std::string& s){ cout <<"B obj::" << s << endl; };
B::~B(){};
Я думал о создании глобальной функции получения
getA()
{
static std::string A::a; //hope that would force A::a initialization
return A::a;
}
, а затем
static B b(getA())
выглядит ужасно ...