命名空间中的“string不是类型”

时间:2012-04-21 04:09:18

标签: c++ string namespaces

我用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>头文件,但它仍然不起作用。

我写这段代码只是为了练习而不是为了工作。

谢谢你!

3 个答案:

答案 0 :(得分:4)

问题是stringvar.hpp的命名空间。 stringstd命名空间,但您没有告诉编译器。您可以通过将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,并且不会从全局命名空间中获取所有内容。