2013-03-21 2 views
-1

Я пытаюсь создать класс сложного числа и хочу создать мнимую единицу i как константу. Я хочу, чтобы иметь возможность использовать его в любом коде, когда класс включен. Например:Как создать глобальную константу класса - C++

#include "complex.h" 
complex c = 2*i; 

Я попытался определить его таким образом: static const complex i в complex.h под public: и const complex complex::i = complex(0,1) в complex.cpp. Но когда я пишу код сверху в main.cpp, я получаю необъявленную переменную ошибку.

Как я могу это сделать?

Примечание: Я определил = и * операторы

+0

Как насчет объявления 'i' как' public' static const данных? – timrau

+0

Конечно, это не определено - вы сделали это частным. –

+0

@CareyGregory Независимо от того, является ли он конфиденциальным или нет, это не влияет на его определение или нет. Фактически, доступ не влияет на то, что когда-либо было при поиске имени. Все это означает, что если компилятор найдет личное имя с поиском (или разрешение перегрузки разрешается для частной функции), вы получите сообщение об ошибке. –

ответ

0

Вы объявили complex::i, но вы пытаетесь использовать i. Либо изменить код

complex c = 2 * complex::i; 

Или создать глобальную константу i (примечание: это не очень хорошая идея, но вы можете сделать это внутри namspace).

+0

Хорошо, тогда как создать глобальную константу или сделать это внутри пространства имен? – Moray

+0

@ user2145816 Просто 'complex const i = complex :: i;' в области пространства имен внутри заголовка будет работать. –

2

Объявить extern const complex iв complex.h.

Если вы не заявляете, что i будет extern, он должен быть определен в каждом модуле компиляции, который его использует. Связывание двух таких единиц компиляции приведет к получению дублирующей ошибки определения.

+4

Я действительно не рекомендую иметь глобальный объект с именем 'i'. –

+0

Я тоже. К сожалению, ОП не спрашивал о плюсах и минусах глобальных объектов, а о том, как их создать. – Oswald

+0

@ Oswald На самом деле, в своем вопросе он спросил о переменной _member_ с именем 'i', а не глобальной. –

Смежные вопросы