C++:in namespace 'std' does not name a template type

对于类的声明的头文件,对于include它的任何一个文件,都需要将这个类内部声明的成员需要的头文件include进去。代码如下:

// hehe.h
#ifndef HEHE_H
#define HEHE_H
class Hehe{
public:
    Hehe() = default;
    void ShowSomthing();
    // do somthing
private:
    std::vector<double> vec;
};
#endif  
  // hehe.cpp
  #include <iostream>
  #include "hehe.h"
  void Hehe::ShowSomthing(){
      std::cout << __func__ << std::endl;
  }
  // do somthing
// main.cpp
#include <iostream>
#include "hehe.h"
using namespace std;
int main(){
    Hehe h;
    h.ShowSomething();
    return 0;
}

进行编译,将会报出错

In file included from hehe.cpp:2:0:
hehe.h:9:7: error: ‘vector‘ in namespace ‘std‘ does not name a template type
  std::vector<double> vec;
       ^~~~~~
In file included from main.cpp:2:0:
hehe.h:9:7: error: ‘vector‘ in namespace ‘std‘ does not name a template type
  std::vector<double> vec;
       ^~~~~~
main.cpp: In function ‘int main()‘:
main.cpp:6:5: error: ‘class Hehe‘ has no member named ‘ShowSomething‘; did you mean ‘ShowSomthing‘?
   h.ShowSomething();
     ^~~~~~~~~~~~~
     ShowSomthing

之后,对于main.cpp添加#include ,通过

// main.cpp
#include <iostream>
#include <vector>
#include "hehe.h"
using namespace std;
int main(){
    Hehe h;
    h.ShowSomething();
    return 0;
}

C++:in namespace 'std' does not name a template type

时间: 2024-10-16 03:40:50

C++:in namespace 'std' does not name a template type的相关文章

【转】关于“using namespace std”

对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std.这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义.其作用就在于避免发生重命名的问题. 1. 关于namespace C++引入了命名空间namespace主要解决了多个程序员在编写同一个项目中可能出现的函数等重名的现象.解决方法就是加上自己的命名空间.比如下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 1

C++ using namespace std(转载)

转载自http://www.kuqin.com/language/20080107/3532.html 感谢这位大神的解答! 以下的内容摘抄自转载的文章里面的部分内容. 早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h. 因此,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现:当使用<iostream>的时候,该头文件没有定义全局命名空

using namespace std

using namespace std std 是一个命名空间..不同的命名空间可以有相同的类名被定义 ..using namespace std;就是指明下面的程序使用std,如果不用这句指明的话就要用std::string(string是std空间中定义的也可以在全局空间中定义,只要名字空间不一样即可..)..否则可以默认名字空间中有std.便不用std::来修饰它是C++新标准中有的,解决多人作编大程序时名字冲突问题.比如A B两个班都有叫张三的人,你要使用A班的张三,必然要先指名是A班这

(转)c++ 中的using namespace std是什么意思,什么时候用

使用std命名空间 98年以后的c++语言提供一个全局的命名空间namespace,可以避免导致全局命名冲突问题.举一个实例,请注意以下两个头文件: // one.hchar func(char);class String { ... }; // somelib.hclass String { ... }; 如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突.所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙.比如://

Error:全局变量不明确(using namespace std 与全局变量的冲突)

在用递归写八皇后时,定义了一个全局变量count,结果出现问题如下:提示全局变量不明确. 最后发现在实现文件.cpp中,我使用了using  namespace std; 解决方法: 1.使用count 的地方改成 ::count 替代(因为std命名空间下也有 std::count ,编译器不确定此处是::count 还是std::count,所以会不明确) 2.注释掉这个命名空间 3.或者改用 : using std::cout; using std::endl; using std::ci

using namespace std;的注意事项

作者:zhang.jingjing链接:转自  https://www.zhihu.com/question/26911239/answer/51503880来源:知乎 因为使用STL中 有部分名称是没有加下划线的保留标记的而在自己的源代码中用到了后会引发未定义的后果 例如: #include <algorithm> using namespace std; int main() { int max=0; } 一直我都告诫学习C++的人 以后精通了C++就不要用using namespace

关于using namespace std

[来自]http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html 对于一个存在着标准输入输出的C++控制台程序,一般会在#include <iostream>的下一行发现一句话,using namespace std; 这句话其实就表示了所有的标准库函数都在标准命名空间std中进行了定义.其作用就在于避免发生重命名的问题. 1. 关于namespace C++引入了命名空间namespace主要解决了多个程序员在编写同一个

C++“using namespace std;”的理解

如果程序中需要使用C++的输入(cin)或输出(cout)工具,必须提供这样两行代码: 1 #include <iostream> 2 using namespace std; //可以使用空间名称为std里面的东西 当我建立一个名为HelloWord 的C++工程时会出现这样的代码: 1 using namespace HelloWord; //可以使用空间名称为HelloWord里面的东西 C++引入名称空间namespace的目的是避免多个程序员在编写同一个项目时出现函数或变量重名的现象

(C++)浅谈using namespace std

1.<iostream>和<iostream.h> 在你的编译器include文件夹里面可以看到,二者是两个文件,里面的代码是不一样的. 后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里: c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h. 因此, 当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现: 当使用<iostr