テンプレートと静的メンバーを使用していくつかのアイデアを実装しています。「実際の」コードは別のエラーを生成しますが、これはおもちゃのサンプルコードにまだあるエラーです
#include <string>
#include <iostream>
template<int dim>
class Class1 {
public:
Class1() {};
~Class1() {};
void foo() {
std::cout<<"foo-1"<<std::endl;
}
protected:
std::string name;
};
template<int dim>
class Class2 : public Class1<dim>
{
public:
Class2(const int & a, const int &b) :
number( Class2<dim>::id_generator++ )
{
Class1<dim>::name = "My-name";
foo(); // (1)
};
void foo() {
Class1<dim>::foo();
std::cout<<"foo-2"<<std::endl;
}
private:
const unsigned int number;
static unsigned int id_generator;
};
int main()
{
int a = 1, b=2;
Class2<2> class2(a,b); // (2)
}
リンカーエラーで:
undefined reference to `Class2<2>::id_generator'
実際の例では 2 つのエラーが発生します
(1) required from 'Class2<dim>::Class2(int, int) [with int dim = 3]'
(2) required from here.
その実際のエラーは、まったく何も教えてくれません! :(おもちゃの問題が解決されれば、現実の問題もなくなることを願っていますが、構造のコンテキストで「現実の」エラー(これらの2行)について誰かがアイデアを持っている場合は、pls、お知らせ下さい。