这两个标题有什么区别?

Rya*_*yan 1 c++ header-files

我有这两个头文件,如果我没有放在std::所有字符串声明前面而另一个没有,则会产生错误.我只是想知道两者之间有什么区别.

如果std::不在字符串声明之前,以下将产生错误:

#include <string>
#include <vector>

#pragma once

#ifndef DATABASE_H
#define DATABASE_H

struct Item
{
    public:
        std::string object;

        int numOfColors;
        std::string colors;

        int sizeSmall;
        int sizeLarge;
};

class database
{
private:
    void fillDatabase(std::vector<Item>);
public:
    void getDatabase(std::vector<Item>);
};

#endif
Run Code Online (Sandbox Code Playgroud)

以下代码不会产生错误:

#include <string>

#pragma once

#ifndef GUISTRUCT_H
#define GUISTRUCT_H

struct guiValues
{
    public:
        string shape;
        string color;
        int width;
        double squareProbability;
        double rectangleProbability;
        double circleProbability;

        string firstMostLikelyObject;
        double FMLOprobability;
        string secondMostLikelyObject;
        double SMLOprobability;
        string thirdMostLikelyObject;
        double TMLOprobability;

};

#endif
Run Code Online (Sandbox Code Playgroud)

c-s*_*ile 8

第二个文件包含在定义的其他文件之后

using namespace std;
Run Code Online (Sandbox Code Playgroud)

  • OP的问题正是经验丰富的C++程序员不建议在头文件中使用`using namespace std;`的原因! (2认同)