Visual Studio 2005(SP1)のVisual C++にて開発を行っているときにエラーが発生したのでその解決方法などを。
発生エラー
エラーとしはこのような感じ
c:\program files\microsoft visual studio 8\vc\include\vector(1323) : error C2825: ‘_MycontTy’: ‘::’ が後に続くときは、クラスまたは名前空間でなければなりません
c:\program files\microsoft visual studio 8\vc\include\vector(1416) : コンパイルされたクラスの テンプレート のインスタンス化 ‘std::_Vb_iter_base<_MycontTy>’ の参照を確認してください
with
[
_MycontTy=int
]
c:\program files\microsoft visual studio 8\vc\include\vector(1323) : error C2039: ‘difference_type’ : ‘
global namespace'' のメンバではありません。
c:\program files\microsoft visual studio 8\vc\include\vector(1323) : error C2146: 構文エラー : ',' が、識別子 'difference_type' の前に必要です。
c:\program files\microsoft visual studio 8\vc\include\vector(1323) : error C2065: 'difference_type' : 定義されていない識別子です。
c:\program files\microsoft visual studio 8\vc\include\vector(1325) : error C2955: 'std::_Ranit' : クラス テンプレート を使用するには テンプレート 引数リストが必要です
c:\program files\microsoft visual studio 8\vc\include\xutility(565) : 'std::_Ranit' の宣言を確認してください。
c:\program files\microsoft visual studio 8\vc\include\vector(1380) : error C2825: '_MycontTy': '::' が後に続くときは、クラスまたは名前空間でなければなりません
c:\program files\microsoft visual studio 8\vc\include\vector(1380) : error C2039: 'size_type' : 'global namespace” のメンバではありません。
c:\program files\microsoft visual studio 8\vc\include\vector(1380) : error C2146: 構文エラー : ‘;’ が、識別子 ‘_Myoff’ の前に必要です。
c:\program files\microsoft visual studio 8\vc\include\vector(1380) : error C4430: 型指定子がありません – int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\microsoft visual studio 8\vc\include\vector(1403) : error C2825: ‘_MycontTy’: ‘::’ が後に続くときは、クラスまたは名前空間でなければなりません
c:\program files\microsoft visual studio 8\vc\include\vector(1403) : error C2327: ‘std::_Vb_iter_base<_MycontTy>::size_type’ : 型名、スタティック、または列挙子ではありません。
with
[
_MycontTy=int
]
c:\program files\microsoft visual studio 8\vc\include\vector(1403) : error C2039: ‘size_type’ : ‘`global namespace” のメンバではありません。
c:\program files\microsoft visual studio 8\vc\include\vector(1403) : error C2146: 構文エラー : ‘;’ が、識別子 ‘_My_actual_offset’ の前に必要です。
c:\program files\microsoft visual studio 8\vc\include\vector(1403) : error C2086: ‘int std::_Vb_iter_base<_MycontTy>::size_type’ : 再定義されました。
with
[
_MycontTy=int
]
c:\program files\microsoft visual studio 8\vc\include\vector(1404) : error C4430: 型指定子がありません – int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\program files\microsoft visual studio 8\vc\include\vector(1404) : warning C4183: ‘_My_actual_offset’: 戻り値の型がありません。’int’ を返すメンバ関数とみなします。
ものすごくたくさんのエラーが発生しているが、これを発生するコードは、
1 2 3 4 5 6 7 8 9 10 11 |
#include <vector> using namespace ::std; int _tmain(int argc, _TCHAR* argv[]) { int a,b; swap < int > ( a, b ); return 0; } |
たったこれだけである。重要な点は、#include <vector>とswap < int >だけである。
解決方法
単に、
1 2 |
int a,b; swap( a, b ); |
とすればよいようだ。swap < int > というようなテンプレートを指定した書き方は間違えではないようだが、#include <vector>をしているときにはこのような問題が発生する。