[C++] staticメンバ変数の宣言と定義(初期化と代入の違い) --- undefined reference

■エラー:
staticメンバ変数(クラス変数)がundefined reference。
BCCでのエラーメッセージは、
「Error: 外部シンボル 'Printer::bug' が未解決」です。

■コード:
[main.h]
class Printer 
{
public:
 Printer();
 void print();
 static Printer bug;
 char* str;
};

[main.cpp]
#include <iostream>
#include "main.h"

Printer::Printer(){ str = "Ok"; }
void Printer::print(){ std::cout << str;}

int main()
{
 Printer p;
 p.print();
 Printer::bug.print();
}



クラスPrinterは、クラス共通のオブジェクトbugをもっています。
しかし、そのbugがエラーになってしまいました。
単純なことですが、クラス変数Printer::bugは宣言しただけで、初期化を忘れていました。

main.cppの中にクラス変数の定義?初期化?を一文加えるとOkです。
関数の宣言と定義の違いはまだわかりやすいですが、変数はあまり宣言と初期化を意識して区別していなかったので、ちょっと戸惑いました。

[main.cpp]
#include <iostream>
#include "main.h"

Printer Printer::bug;   // ※ static変数の定義をする

Printer::Printer(){ str = "Ok"; }
void Printer::print(){std::cout << str; }

int main()
{
 Printer p;
 p.print();
 Printer::bug.print();
}

クラス変数や定数の宣言と初期化(あるいは初期値の表明といってもよいけど)が離れてしまうのは、ほかの言語と比べても ちと書きにくくないでしょうか。なんかいい方法がありませんかね?

プログラミング言語C++第4版(2015, ビャーネ・ストラウストラップ; 初版1986)
C++の原典。言語設計者の著作だからこそ、ほかの本で「わかったつもり」になっている部分が、クリアになると思います。