研究室にてバグ取りをしました。スレッドが立ち上がる前に終了させると、今まで溜まっていたリクエストを無理やり空にしてしまう仕様にしていたためでした。とりあえず動いているようですし、解決できたかな。
テンプレートクラスに手を出してみたところ、変なエラーが出てきてリンクできません。他のオブジェクトにテンプレート関数があり、インラインコンストラクタではない場合(サンプルで言うとclass B<T>)、コンストラクタへの参照が解決できない、とかリンカがほざいてリンクしません。Aへの参照は解決しているくせに…なぜ。
#include "b.h"
template <class T> class A {
public:
A(void);
virtual ~A(void);
};
template <class T>
A<T>::A(void) {}
template <class T>
A<T>::~A(void) {}
int main()
{
A<int *> a;
B<int *> b;
C<int *> c;
return 0;
}
template <class T> class B {
public:
B(void);
virtual ~B(void);
};
template <class T> class C {
public:
C(void) {};
virtual ~C(void) {};
};
#include "b.h"
template <class T>
B<T>::B(void) {}
template <class T>
B<T>::~B(void) {}
コンパイルの結果はこんなかんじ。
$ g++ -c b.cpp a.cpp $ g++ b.o a.o a.o: In function `main': a.o(.text+0x1d): undefined reference to `B<int *>::B(void)' a.o(.text+0x4e): undefined reference to `B<int *>::~B(void)' a.o(.text+0xaf): undefined reference to `B<int *>::~B(void)' collect2: ld returned 1 exit status
< | 2005 | > | ||||
<< | < | 01 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | - | - | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | - | - | - | - | - |
合計:
本日:
管理者: Katsuhiro Suzuki(katsuhiro( a t )katsuster.net)
This is Simple Diary 1.0
Copyright(C) Katsuhiro Suzuki 2006-2023.
Powered by PHP 8.2.15.
using GD bundled (2.1.0 compatible)(png support.)