something.hОпределение или переопределение не допускаются внутри функции
1 class Something
2 {
3 private:
4 static int s_nIDGenerator;
5 int m_nID;
6 static const double fudgeFactor; // declaration - initializing here will be warning
7 public:
8 Something() { m_nID = s_nIDGenerator++; }
9
10 int GetID() const { return m_nID; }
11 };
foo.cpp
1 #include <iostream>
2 #include "Something.h"
3
4 // This works!
5 //const double Something::fudgeFactor = 1.57;
6
7 int main()
8 {
9 Something cFirst;
10 Something cSecond;
11 Something cThird;
12
13 const double Something::fudgeFactor = 3.14;
14
15 using namespace std;
16 cout << cFirst.GetID() << endl;
17 cout << cSecond.GetID() << endl;
18 cout << cThird.GetID() << endl;
19 return 0;
20 }
При попытке определить значение статической переменной-члена класса Что-то внутри главной, я сталкиваюсь ошибка компилятора, как указано ниже. Назначение значения вне main() отлично работает. Я понимаю, что статические переменные-члены могут быть заданы только один раз, но почему назначение его вне функции по сравнению с функцией функции?
$ clang++ foo.cpp foo.cpp:13:29: error: definition or redeclaration of 'fudgeFactor' not allowed inside a function const double Something::fudgeFactor = 3.14; ~~~~~~~~~~~^ 1 error generated.
Вы можете использовать 'constexpr' вместо' const' – Slava
Да, вы правы. На самом деле, я думаю об удалении этого ответа, потому что ваш комментарий совершенно справедливо указывает на то, что вопрос является дубликатом, и мы не хотим загрязнять SO дубликатами. –