好的,我有下面的代码,当我执行它时,出现以下错误:
\n\ntype/value mismatch at argument 1 in template parameter list for \xe2\x80\x98template<class _Tp, class _Alloc> class std::vector\xe2\x80\x99\n vector<s> v;\nRun Code Online (Sandbox Code Playgroud)\n\ntemplate <class T>\nclass A {\npublic:\n struct s{T x;};\n};\n\ntemplate <class T>\nclass B: public A<T> {\npublic:\n using A<T>::s;\n vector<s> v;\n};\nRun Code Online (Sandbox Code Playgroud)\n\n有人可以解释一下这个问题吗?
\n问题是编译器不知道s是类型还是值。在这种情况下,您添加typename或template,但在我测试时这些都不起作用。但是,直接在 中使用完整类型vector 确实有效:
template <class T>
class B: public A<T> {
public:
using A<T>::s;
std::vector<typename A<T>::s> v;
};
Run Code Online (Sandbox Code Playgroud)
(编辑)继续玩它,因为为什么不呢,当然,typename在我没有尝试过的一个地方需要它:线路using。下面的代码也可以工作。
template <class T>
class B: public A<T> {
public:
using typename A<T>::s;
std::vector<s> v;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4333 次 |
| 最近记录: |