【发布时间】:2014-05-18 06:09:47
【问题描述】:
我今天正在测试一些模板代码,我发现了一些有趣的东西,但我找不到任何好的理由来解释为什么会发生这种情况。我请求您考虑并用您的知识启发我。感谢您的宝贵时间。
此代码块运行正常。
template<class TItem>
class PrintableQueue : public queue<TItem> {
public:
friend ostream& operator<<(ostream& os, const PrintableQueue<TItem>& queue) {
copy(queue.c.begin(), queue.c.end(), ostream_iterator<TItem>(os, " "));
return os;
}
};
int main(int argc, const char* argv[])
PrintableQueue<int> queue;
queue.push(1);
queue.push(2);
cout << queue;
}
但是,当我将朋友函数的定义放到类的外部时,它不起作用。
template<class TItem>
class PrintableQueue : public queue<TItem> {
public:
friend ostream& operator<<(ostream& os, const PrintableQueue<TItem>& queue);
};
ostream& operator<<(ostream& os, const PrintableQueue<TItem>& queue) {
copy(queue.c.begin(), queue.c.end(), ostream_iterator<TItem>(os, " "));
return os;
}
我得到的错误如下。
'TItem' : undeclared identifier
'PrintableQueue' : 'TItem' is not a valid template type argument for parameter 'TItem'
我的问题是,为什么编译器不能解析 TItem ?
【问题讨论】:
-
TItem在类定义的范围内。您将其移出类定义。
标签: c++ templates compiler-errors