我正在努力使用以下代码。基本上,我有一个类Foo和嵌套类Bar,现在我想将一个类Bar对象的指针传递给一个函数,但它不能编译。任何人都可以帮我这个吗?谢谢。
template <typename T>
struct Foo
{
struct Bar
{
T data_;
};
Bar bar_;
};
template <typename T>
void func(Foo<T>::Bar* bar) // Why is this line wrong???
{
}
int main()
{
Foo<int> foo;
foo.bar_.data_ = 17;
func(&foo.bar_);
return 0;
}
答案 0 :(得分:15)
您需要拥有以下签名
template <typename T>
void func(typename Foo<T>::Bar* bar) // Why is this line wrong???
但是,这不是唯一的问题
func(&foo.bar_);
也需要
func<int>(&foo.bar_);
这是因为您正在调用模板化函数“func”,但无法推断其类型。没有它的类型,它会给出一个错误,如
no matching function for call to 'func(Foo<int>::Bar*)'
答案 1 :(得分:3)
这是dependent name,你需要说:
template <typename T>
void func(typename Foo<T>::Bar* bar) // Tell the compiler explicitly it's a type