C++相談室 part66at TECHC++相談室 part66 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト500:デフォルトの名無しさん 09/04/09 00:17:10 俺としては以下のやり方でMyClassクラスによるstd::swap関数テンプレートの特殊化を行い、 using std::swap; swap(x,y); で特殊化したstd::swap<MyClass>が呼び出せるかと思ったのだが、 以下のやり方だとなにか定義がかぶっているようなことを言われてエラーになってしまう。 再現するソースは次のようなもの。 //以下はMyClass.h class MyClass { char *p; public: void swap(MyClass &hoge); MyClass(); ~MyClass(); }; //以下はMyClass.cpp #include <algorithm> #include "MyClass.h" MyClass::MyClass():p("pointer"){} MyClass::~MyClass(){} void MyClass::swap(MyClass &hoge) {std::swap(this->p, hoge.p);} namespace std { template<> void swap(MyClass &lhs,MyClass &rhs) {lhs.swap(rhs);} } 501:500 09/04/09 00:18:28 //以下はmain.cpp #include <algorithm> #include "MyClass.h" int main() { MyClass x,y; using std::swap; swap(x,y); return 0; } としたら、g++にて MyClass.cpp:(.text+0x42): multiple definition of `void std::swap<MyClass>(MyClass&, MyClass&)' main.cpp:(.text$_ZSt4swapI7MyClassEvRT_S2_[void std::swap<MyClass>(MyClass&, MyClass&)]+0x0): first defined here collect2: ld returned 1 exit status というエラーが出る。 どうしたらいい?? 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch