Кажется, это ошибка GDB, а не проблема вашего компилятора или кода.
На GDB я мог бы оценить следующее:
ptype Configuration::properties.instanceFlag
И он возвращает type = bool
. GDB действительно интерпретирует ваш properties
как тип Configuration
.
Но если изменить private:
на public:
и поставить строку Configuration::properties.instanceFlag = true
на main()
, g ++ выдаст следующую ошибку:
test.cpp: In function ‘int main()’:
test.cpp:26:28: error: ‘class std::map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >’ has no member named ‘instanceFlag’
Configuration::properties.instanceFlag = true;
Подразумевает, что ваш компилятор это прекрасно понимает. Протестировано с g ++ - 5.4.0 и gdb-7.11.1 под Ubuntu.
РЕДАКТИРОВАТЬ Автономный пример:
#include <map>
#include <string>
struct Configuration {
static std::map<std::string, std::string> properties;
static bool instanceFlag;
};
std::map<std::string, std::string> Configuration::properties {};
bool Configuration::instanceFlag = false;
int main(void)
{
Configuration::properties.instanceFlag = true;
return 0;
}
Предполагая, что имя файла mytest.cpp, если вы скомпилируете его с g++ mytest.cpp -std=c++11
, оно должно выдать следующую ошибку.
mytest.cpp: In function ‘int main()’:
mytest.cpp:14:28: error: ‘class std::map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >’ has no member named ‘instanceFlag’
Configuration::properties.instanceFlag = true;
Если вы видите вышеупомянутую ошибку, это значит, что вы в порядке. Это просто ошибка в gdb, и у вашего кода не будет проблем с использованием статической карты.
Если это происходит без ошибок, то это проблема.