1

このコードはコンパイルされません(エラーC2059、C2065、C2072、C2143、C2146、C2447、C2470、C4430が発生します)が、B*をintのような組み込み型に変更した場合はコンパイルされます。何か案は?

template <typename T>
class A
{
private:
    struct B
    {
        T key;
    };

    B* foobar(T key);

};

template <typename T>
B* A<T>::foobar(T key) 
{
    B* ptr = new B;
    B->key = key;
    return ptr;
}

int main()
{}
4

2 に答える 2

4

メソッドにいくつかのエラーがあります。

1)リターンタイプのスコープは適切に修飾されている必要があります。

2) 。ではなくkeyifA::<T>::Bインスタンスを設定する必要がありますB

これを試して:

template <typename T>
typename A<T>::B* A<T>::foobar(T key) // fix error 1)
{
    B* ptr = new B();
    ptr->key = key;  // fix error 2)
    return ptr;
}
于 2012-07-29T08:50:14.700 に答える
1

戻り値のタイプは、 :typename A<T>::B*だけではありません。B*

template<typename T>
typename A<T>::B* A<T>::foobar(T key)
{
   //..
}

typenameリターンタイプのキーワードにも注意してください。

于 2012-07-29T08:50:32.777 に答える