模板参数中参数 1 处的 C++ 类型/值不匹配

Kel*_*loo 5 c++

好的,我有下面的代码,当我执行它时,出现以下错误:

\n\n
type/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;\n
Run Code Online (Sandbox Code Playgroud)\n\n
template <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};\n
Run Code Online (Sandbox Code Playgroud)\n\n

有人可以解释一下这个问题吗?

\n

Ste*_*ell 7

问题是编译器不知道s是类型还是值。在这种情况下,您添加typenametemplate,但在我测试时这些都不起作用。但是,直接在 中使用完整类型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)