使用std::string::npos时出错 在C++上,我得到以下错误信息: error: ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ is not a namespace or unscoped enum

使用std::string::npos时出错 在C++上,我得到以下错误信息: error: ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ is not a namespace or unscoped enum,c++,g++,using,C++,G++,Using,怎么了? 我将g++与2017标准一起使用-std=c++17 我包含了标题。再次读取错误 它告诉您:除非您试图别名一个名称空间或一个非作用域的枚举,否则我将怯懦地拒绝与这个using子句有任何关系 也就是说:不要试图定义,你会没事的 引用的参考文献说: 使用声明可用于将命名空间成员引入其他命名空间和块作用域,或将基类成员引入派生类定义 没有提到引入静态常量成员。'npos'既不是名称空间,也不是枚举。它是一个静态常量成员 使用性病;意味着在这个命令之后,我可以写string而不是std::st

怎么了? 我将g++与2017标准一起使用-std=c++17

我包含了标题。

再次读取错误

它告诉您:除非您试图别名一个名称空间或一个非作用域的枚举,否则我将怯懦地拒绝与这个using子句有任何关系

也就是说:不要试图定义,你会没事的

引用的参考文献说:

使用声明可用于将命名空间成员引入其他命名空间和块作用域,或将基类成员引入派生类定义


没有提到引入静态常量成员。

'npos'既不是名称空间,也不是枚举。它是一个静态常量成员


使用性病;意味着在这个命令之后,我可以写string而不是std::string

,因为std::string是一个classauto npos=std::string::npos;将实现你似乎想做的事情。s/使用std/使用std::string;但是'cout'也不是namespce或enum,但我们可以使用std::cout。区别是什么?cout的嵌套是一个名称空间。因为suchm cout是要在其他名称空间中引入的名称空间成员。相比之下,string::npos是一个类成员——因此,它不能到处引入,只能引入到派生类中
  using std::string::npos;