私のコンパイラは私のテンプレートメソッドを実装する方法に満足していません。これらの実装では、トンのが「未定義のタイプT」のようなエラーメッセージを表示します。これは私の第一の方法であるテンプレート以外のクラスのテンプレートメソッドを定義するにはどうすればよいですか?
、それはクラスのブロックの外に実装されています。
class VectorConvertor
{
public:
// ...
template <class T>
static void ReverseVectorElements(std::vector<T> & Vector);
// ...
};
template <class T>
void VectorConvertor::ReverseVectorElements(std::vector<T> & Vector)
{
std::vector<T>::size_type size = Vector.size();
T swap;
for (std::vector<T>::size_type i=0; i<size/2; i++)
{
swap = Vector.at(i);
Vector.at(i) = Vector.at(size-1-i);
Vector.at(size-1-i) = swap;
}
}
もう一つはこれです。今回はメソッドがクラス内で実装されています:
class ElementaryMath
{
public:
// ...
template <class T> static char sign(T num)
{
return (num >= static_cast<T>(0)) ? static_cast<char>(+1) : static_cast<char>(-1);
}
// ...
}
私のコードに何か問題がありますか、それともコンパイラ自体に問題がありますか?
IDE &コンパイラ:Visual Studioの2010
@hkBattousai:winapiの最大と最小のマクロは一定の頭痛の原因です。 winapiがそれらを作成するのを防ぐために、(プロジェクト設定で行うのが最善の)特別な設定マクロがあります。たとえば、http://connect.microsoft.com/VisualStudio/feedback/details/101300/std-numeric-limits-min-std-numeric-limits-max-and-min-max-macrosを参照してください。あなたのコメントを削除する前にもっと意味を成していましたが、私はそれがまだ当てはまると思うので、ここに残しています。 –
ああ、あなたは本当にその場に出ました。関数 "sign()"はありませんでしたが、別のもの(最初のコンパイラエラー)、 "max()"はあなたが言ったのと同じように定義されています。私は以下のように定義していないので、コンパイラエラーはありません。 >> '#ifdef max --- #undef max --- #end' – hkBattousai