当我构建以下源代码时:
#include <stdio.h>
class Heap
{
public:
Heap()
{
printf("Heap()");
}
void* print()
{
printf("This is Heap Print");
}
};
class DvHeap : public Heap
{
public:
DvHeap():Heap()
{
printf("DvHeap()\n");
};
};
template<class T>
class base
{
public:
void* operator new(size_t size)
{
printf("base()\n");
return T::printit().print();
}
};
template<class T>
class derived : public base<derived<T> >
{
static DvHeap xx;
public:
static Heap& printit()
{
printf("DvHeap()\n");
return xx;
}
};
int main()
{
//DvHeap *pH = new DvHeap(1);
derived<DvHeap> *pD = new derived<DvHeap>;
return 0;
}
我收到以下错误:
[debdghos] $ g ++ Ctest.cpp -o test
/tmp/ccM7XI3u.o:在函数derived<DvHeap>::printit()':
Ctest.cpp:(.text._ZN7derivedI6DvHeapE7printitEv[derived<DvHeap>::printit()]+0xf): undefined reference to
derived :: xx'中
collect2:ld返回1退出状态
任何人都可以告诉我为什么会这样吗?该代码用于学习目的。
由于
答案 0 :(得分:1)
您应该在类之外初始化静态成员。
template<typename T>
DvHeap derived<T>::xx;
答案 1 :(得分:0)
完整代码:
include <stdio.h>
class Heap
{
public:
Heap()
{
printf("Heap()");
}
void* print()
{
printf("This is Heap Print");
}
};
class DvHeap : public Heap
{
public:
DvHeap():Heap()
{
printf("DvHeap()\n");
};
};
template<class T>
class base
{
public:
void* operator new(size_t size)
{
printf("base()\n");
return T::printit().print();
}
};
template<class T>
class derived : public base<derived<T> >
{
static DvHeap xx;
public:
static Heap& printit()
{
printf("DvHeap()\n");
return xx;
}
};
template<typename T>
DvHeap derived<T>::xx;
int main()
{
//DvHeap *pH = new DvHeap(1);
derived<DvHeap> *pD = new derived<DvHeap>;
return 0;
}
在您错误的地方阅读: http://www.learncpp.com/cpp-tutorial/811-static-member-variables/