我用c ++编写了一个包含两个文件的程序。
main.cpp
#include "var.hpp"
#include <iostream>
using namespace std;
using namespace YU;
int main()
{
string god = "THL";
age = 10;
cout << age << endl;
cout << god << endl;
return 0;
}
var.hpp
#ifndef __VAR_H__
#define __VAR_H__
#include <string>
namespace YU
{
int age;
string name;
}
#endif
当我编辑它时,它错了。
错误的信息是:
In file included from main.cpp:1:0:
var.hpp:9:5: Error: ‘string’ is not a type name
我不知道为什么,我有include <string>
头文件,但它仍然不起作用。
我写这段代码只是为了练习而不是为了工作。
谢谢你!答案 0 :(得分:4)
问题是string
中var.hpp
的命名空间。 string
是std
命名空间,但您没有告诉编译器。您可以通过将using namespace std;
放在var.hpp
中来解决此问题,但以下是更好的解决方案,因为它不会使用std
中的其他内容混淆全局命名空间:
#ifndef __VAR_H__
#define __VAR_H__
#include <string>
namespace YU
{
int age;
std::string name;
}
#endif
答案 1 :(得分:1)
您的.cpp文件中有using namespace std;
,但它包含var.h
之后。如果你打算像那样写标题,你也应该在标题中加上using namespace std;
。
答案 2 :(得分:1)
另外你可以使用
using std::string;
这样可以避免在每个字符串前面输入std :: string,并且不会从全局命名空间中获取所有内容。