#cpp
В прекомпилированном заголовке создается статический объект. #pragma once #include#include #include #include class globale { public: int A; globale::globale() { A++; std::cout << "\n1"; std::cout << "\nA=" << A; } }; static globale object_; Главный код: #include "stdafx.h" int main() { std::cout << "\n\n\nobject_.A=" << object_.A; std::cout << "\n"; std::system("pause"); } В итоге globale object_; формируется дважды. То есть дважды вызывается конструктор. Если переместить static globale object_; после #include "stdafx.h" то всё нормально. Это вызов одного и того же объекта? Почему так происходит? Можно ли это исправить?
Ответы
Ответ 1
Какие cpp-файлы есть в проекте? Если есть stdafx.cpp, то я буду не удивлен созданию двух разных статических объектов: по одному на каждый cpp-файл проекта. Решение - переместить определение статического объекта в cpp-файл. Если требуется использование этого объекта в других файлах проекта, то необходимо переписать код. Например, использовать ключевое слово extern, говорящее компилятору искать данный символ в других файлах, а не в текущем.
Комментариев нет:
Отправить комментарий