我有这两个头文件,如果我没有将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
以下代码不会产生错误:
#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
答案 0 :(得分:8)
第二个文件包含在定义
的其他文件之后using namespace std;
答案 1 :(得分:2)
string
在namespace std
中声明。因此,需要使用命名空间std来使用字符串。它可以通过两种方式完成:
通过明确提及要在std命名空间中包含哪种类型(在本例中为字符串),如情况1,std::string colors
OR
通过启用整个std命名空间,using namespace std;
从全局命名空间中的命名空间导入所有类型。(请注意,不建议在标题中执行此操作)
在第二种情况下,您似乎已经在特定包含之前包含了整个std命名空间,因此即使没有提及std::String