繁体   English   中英

模板化类的成员函数不能返回指向成员结构的指针?

[英]Member function of a templated class can't return a pointer to member structure?

这段代码不会编译(给出错误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()
{}

您的方法有一些错误。

1)返回类型的范围必须适当限定。

2)如果是A::<T>::B实例,而不是B ,则必须设置key

尝试这个:

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;
}

返回类型应该是类型名typename A<T>::B* ,而不仅仅是B*

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

注意返回类型中的typename关键字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM