Я знаю, что это будет простой ответ, но я в тупике. Я максимально упростил код, чтобы добраться до сути.
У меня есть простой заголовочный файл, назовите его a.h
, который имеет нижеследующее и ничего более (он действует как файл глобальных настроек для всех файлов в моем проекте, которые решили включить его)
#ifndef A_H
#define A_H
namespace settings{
static char name[16]={'\0'};
}
#endif
Затем у меня есть другой класс с собственным заголовочным файлом, назовем его b.cpp (с b.h не показан)
#include "a.h"
void B::doSomething()
{
strcpy(settings::name,"I like Dogs");
}
Наконец, третий класс, который обращается к 'settings :: name, назовите его c.cpp (с c.h не показан)
#include "a.h"
void C::printSomething()
{
printf("Some Girls Say %s\n",settings::name);
}
Увы, все, что печатается, это "Some Girls Say". Что дает? Я не понимаю, как settings :: name не выживает уничтожение функции B :: doSomething () (я могу только догадываться, что это проблема). Является ли strcpy ленивым и просто указывает на настройки :: имя, с которого начинается «I Like Dogs», а не действует как strdup?
Любая помощь и обходной путь высоко ценится. Спасибо!
РЕДАКТИРОВАТЬ: Для большей ясности B.doSomething () вызывается перед C.printSomething ().