C++相談室 part19

このエントリーをはてなブックマークに追加
940デフォルトの名無しさん
int main()
{
  A<int> a;
}
↑↑Test.cpp↑↑

↓↓A.h↓↓

#pragma once

template<class T>
class A
{
public:
  A(void);
  ~A(void);
};
↑↑A.h↑↑
941940:03/06/08 03:08
↓↓A.cpp↓↓
#include "A.h"

template <class T> A<T>::A(void)
{
}

template <class T> A<T>::~A(void)
{
}

↑↑A.cpp↑↑

Test error LNK2019: 未解決の外部シンボル "public: __thiscall A<int>::~A<int>(void)" (??1?$A@H@@QAE@XZ) が関数 _main で参照されました。
Test error LNK2019: 未解決の外部シンボル "public: __thiscall A<int>::A<int>(void)" (??0?$A@H@@QAE@XZ) が関数 _main で参照されました。
Test fatal error LNK1120: 外部参照 2 が未解決です。

どうすればいいですか?
テンプレート関数の定義が使用するコンパイル単位に含まれるようにすればいい。
テンプレートつきクラスのメソッドを、クラス定義の外に書くときは、
exportだっけなぁ。なんかキーワードが必要だったとおもうなぁ。
そういやSTL無関係に自前でtemplateなんて使ったことないな
テンプレートはヘッダに全部書くがよろし。
946940:03/06/08 03:46
テンプレートつきクラスの場合ヘッダーに実装を書くの普通なんですか?
いまのところ、exportをサポートしているコンパイラが少ないので、普通。
948940:03/06/08 03:53
そうですか ヘッダーに書くことにします
みなさまありがとうございました
>>938
STLportは古いコンパイラに対応するために色々無理を
しているから、さすがに読ませるのはどうかと思うぞ。
gccのlibstdc++くらいでいいんじゃないか?
ところどころ実装が汚いor間違っている部分があるけど。
(例外まわりとか)
(^^)(^^)(^^)(^^)(^^)(^^)
(^^)(^^)(^^)(^^)(^^)(^^)
(^^)(^^)(^^)(^^)(^^)(^^)
(^^)(^^)(^^)(^^)(^^)(^^)
(^^)(^^)(^^)(^^)(^^)(^^)
(^^)(^^)(^^)(^^)(^^)(^^)
山崎渉


951デフォルトの名無しさん:03/06/08 17:29
castしないでひょうげんしてみて。
std::istringstream ist(static_cast<std::string>(std::string(
(std::istreambuf_iterator<char>(std::cin)),std::istreambuf_iterator<char>())));
もちろんstringを別にしないでだよ。
952デフォルトの名無しさん:03/06/08 18:07
失礼しますた。
VC7コンパイルとおりました。
g++はダメだったもので。
         ☆ チン     マチクタビレタ〜
                         マチクタビレタ〜
        ☆ チン  〃  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・) < 次スレまだ〜?
             \_/⊂ ⊂_ )   \_____________
           / ̄ ̄ ̄ ̄ ̄ ̄ /|
        | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
        |  愛媛みかん  |/
         ☆ チンチン    マチクビタレタ〜
                         マチクビタレタ〜
        ☆ チンチン 〃  Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          ヽ ___\(\・∀・) < みかんっておっぱいに似てるよね〜?
             \_/⊂ ⊂_ )   \_____________
           / ̄ ̄ ̄ ̄ ̄ ̄ /|
        | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
        |  愛媛みかん  |/
955_:03/06/09 02:25
int fun() { vector<int> a; }
とか宣言したときにaのデストラクタを明示的に呼べますか?
ブロック抜けた時じゃなくて。
>>955
多分無理。
a.~vector();じゃなくて?
958デフォルトの名無しさん:03/06/09 06:52
>>955
ちなみそれは宣言ではなく定義ちゅ―のでは。
>>958 宣言⊃定義
960Not 958:03/06/09 07:19
extern int a; ←宣言というのはこういうのじゃない?
>957だとデストラクタ2回呼ばれると思うので素直に
int func()
{
    vector <int> t1;
    {
        vector <int> t2;
    }
   return 0;
}

とか
だから実体参照にはセミコロンをつけろと(ry
963嘘かも。:03/06/09 15:31
vector<int>& a = *new vector<int>;
で、
delete &a;
964デフォルトの名無しさん:03/06/09 16:00
static std::vector<int>* pv;
void func(){
pv = new std::vector<int>;
pv->push_back(int(10));
}
void destroy(){
pv->~vector<int>();
}
965964:03/06/09 16:08
こんなことしちゃいけないよ
newはdeleteで対応が常識。
966デフォルトの名無しさん:03/06/09 16:17
(´-`).。oO(こういう業者って儲かってるんだろうか…)
968デフォルトの名無しさん:03/06/09 16:38
>>966
みたよ〜♪
ぼくねーグッズ持ってるからねいらないやー。
ちなみにおしり入れるやつね。
儲かってないから手段を選んでいないに決まってるだろう。
カーソル移動の定義のやり方を教えてください(;´Д`)人スンマセン
#define カーソル移動
>>970
環境依存です(;´Д`)人スンマセン
>>970
カーソル移動ということはカーソルが無くてはいけないな。

このスレは環境依存の話はナシだからきっと自作なのだろう。
ということで、藻前の作ったカーソルを見せてくれ。話はそれからだ。
struct Cursor
{
  POINT pos; // 位置
  int bShow; // 表示フラグ
}
975デフォルトの名無しさん:03/06/09 18:21
次スレは?
ないなら立てるけど。
>>975
次スレおながい
977v(^・^)v:03/06/09 18:30
>>976
あー、、、やっぱりだめだった。YBBじゃ無理か。でしゃばってスマソ
978デフォルトの名無しさん:03/06/09 18:40
C++ってもう進歩しないの?
言語仕様やライブラリの点で。
979デフォルトの名無しさん:03/06/09 18:49
ちんぽったらそれはC++じゃねーよ
仕様を完全に満たすようにコンパイラに進歩してもらわんとな。
言語仕様いじる以前の問題っぽ。
ライブラリは進歩している。
OWLやらMFCやらQtやらwxWindowsやら、
ただし標準にならないだけ。
おかげでいつまでたってもライブラリ覚えなおすはめに。
>>978
しまくり。
 http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1444.html
 http://www.cuj.com/experts/ の2002年の連載"The New C++"
あたりをどうぞ。
そろそろ新しいC++の仕様を策定すべきだね。
もうそろそろCUIライブラリだけじゃなくGUIライブラリを標準に入れたらどうだ?
>>982
ぱっと見た感じ、要するに、boost, loki, C99 辺りの
ライブラリの一部が標準に追加されそうってことかな?
早くtypeofを標準化汁。
早い床shared_ptrを標準に入れてホスィ。
標準化より次スレが先だ。
989デフォルトの名無しさん:03/06/09 21:32
そんまえになぜに標準化にこだわるか
漏れにはわからん。使えるんだから別にいいべ。
>>989
同意
ライブラリなんかどうでもいいからtypeofを速く
ひとえにポータビリティ
typeofハァハァ…

↓次スレは任せた
↑了解だ兄者。
標準に入ってるだけで使いやすさが団地だべ。
標準ソケットクラス作れよ。
MFCを標準規格に入れてくれないかな。
>>993
でかした
999デフォルトの名無しさん:03/06/09 21:48
いまさらなによ!!!!!!!!!
1000デフォルトの名無しさん:03/06/09 21:48
1
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。