Как статические переменные-члены работают в С++?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как статические переменные-члены работают в С++?

Сообщение Anonymous »

У меня есть этот код:

Код: Выделить всё

#ifndef BT_ORDER_HPP
#define BT_ORDER_HPP

class Order {
public:
/*....*/
private:
static unsigned long long id_generator;
const  unsigned long long id;
};

unsigned long long Order::id_generator = 0;

#endif//BT_ORDER_HPP
он ​​не компилируется, если заголовочный файл включен в несколько единиц компиляции, потому что, насколько я понял, статическая переменная определена во всех единицах компиляции. Но для меня это не имеет смысла, потому что я использую охранники ifndef; Я думал, что компилятор проверит, определен ли уже макрос, и в этом случае опустит код, защищенный блоком, включая определение статической переменной. Этот конкретный класс, который я создаю, имеет множество встроенных простых функций, поэтому создание исходного файла .cpp для него решит проблему, и это стандартный способ сделать это, но в данном случае я чувствую, что в этом нет необходимости, поскольку Мне пришлось бы создать совершенно новый файл всего с двумя строками кода:

Код: Выделить всё

#include "order.hpp"
unsigned long long Order::id_generator = 0;
Может ли кто-нибудь объяснить, что здесь происходит, и предложить элегантное решение?

Подробнее здесь: https://stackoverflow.com/questions/758 ... -work-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»