-1

私は以下を強制的にインスタンス化しようとしています:

//A.h
namespace A {
    template <typename T>
    bool foo (B::C<T>, D);
} 

template bool A::foo<int> (B::C<int>, D);

//1.cpp 

namespace A {
template <typename T> 
bool foo (B::C<T>, D) {
    return false;
}
}




// 2.cpp
#include "A.h"

using namespace A;

void foo()
{///
    ...
    B::C<int> Alpha;
    foo(Alpha, Beta);
}

私が得ているエラーメッセージは次のとおりです。

C2785: 戻り値の型が異なる

C4667: 強制インスタンス化に一致する関数テンプレートが定義されていません

エラーメッセージが関連していないように見えるため、このインスタンス化には何か著しく問題がありますか?

4

1 に答える 1

-2

これは、テンプレートがコンパイル時に展開されるために発生するため、コンパイラはテンプレート化された関数の定義と実装の両方を認識している必要があるため、あるファイルで関数を定義して別のファイルで実装することはできません。

于 2012-06-29T10:18:33.570 に答える