Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板类的成员函数可以';是否返回指向成员结构的指针?_C++_Templates - Fatal编程技术网

C++ 模板类的成员函数可以';是否返回指向成员结构的指针?

C++ 模板类的成员函数可以';是否返回指向成员结构的指针?,c++,templates,C++,Templates,此代码未编译(给出错误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

此代码未编译(给出错误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()
{}
模板
甲级
{
私人:
结构B
{
T键;
};
B*foobar(T键);
};
样板
B*A::foobar(T键)
{
B*ptr=新的B;
B->key=key;
返回ptr;
}
int main()
{}

您的方法中有一些错误

1) 返回类型的范围必须正确限定

2) 如果是
a:::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;
}
模板
typename A::B*A::foobar(T键)//修复错误1)
{
B*ptr=新的B();
ptr->key=key;//修复错误2)
返回ptr;
}

您的方法中有一些错误

1) 返回类型的范围必须正确限定

2) 如果是
a:::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;
}
模板
typename A::B*A::foobar(T键)//修复错误1)
{
B*ptr=新的B();
ptr->key=key;//修复错误2)
返回ptr;
}

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

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

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

返回类型应为
typename A::B*
,而不仅仅是
B*

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

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

新B()的意义是什么?我们正在调用默认初始化器吗?仅仅“新B”有什么区别吗?@IshanBhatnagar在这种情况下没有区别。您可以使用
new B
,它也会调用默认构造函数。new B()的意义是什么?我们正在调用默认初始化器吗?仅仅“新B”有什么区别吗?@IshanBhatnagar在这种情况下没有区别。您可以使用
newb
,这也会调用默认构造函数。