我想要一个指向C的C的指针(下面的示例)。我正在尝试使用g ++ 3.4.0编译类似的类,但我收到错误消息:“b未在此范围内声明”。我如何在C ++中实现这一目标?
main.cpp中:
template <class T> class B;
template <class T> class C;
template <class T>
class A
{
private:
T* first;
B<C<T>>* b;
};
template <class T>
class B
{
};
template <class T>
class C
{
};
答案 0 :(得分:1)
在1998和2003版本的C ++中,要关闭两个模板参数列表,或模板参数列表和C ++样式转换,必须在>
个字符之间放置一个空格,以保持标记化将它们解析为>>
令牌。
std::vector<std::vector<int> > matrix;
std::vector<double> v = static_cast<std::vector<double> >(myobj);
语法指定参数列表或强制类型以>
标记结尾,并且不会将>>
标记识别为其中两个。
在C ++ 11中,添加了一个规则,用于在模板参数列表内和括号外部用>>
个令牌替换>
个令牌。 (所以如果你真的想要右移,你必须使用括号。)
std::array<double, (16>>3)> arr;
答案 1 :(得分:0)
感谢人们帮助我解决这个问题,我找到了解决方案。这似乎是不必要的,但我只需在&gt;之间添加一个空格,如下所示:
B<C<T> >* b;
(我不确定原因。我最初的想法是,它可能被误认为是&gt;&gt;运算符。)