这是基于GCC / G ++,通常在Ubuntu。
下面是我做我的示例程序:
#include <iostream>
using namespace std;
int main()
{
std::string c = "Test";
cout << c;
return 0;
}
上面的代码工作正常。
但我有两个问题,我不完全得到...
写入字符串声明为std:string
也能正常工作。 有什么不同。
如果我用这个std::string
类中声明私有变量,我得到一个错误的错误:“性病”没有指定类型 。 此声明示例:
class KType { private: std:string N;
是否有人可以解释这些问题? 非常感谢!
写入字符串声明为STD:字符串也能正常工作。 有什么不同。
如果您格式化它不同的差别是微小的更加清晰:
std:
string c = "Test";
你声明一个标签叫std
,并使用该名称string
已由倾倒进全局命名空间using namespace std;
。 正确书写它std::string
,您使用的名称string
从std
命名空间。
如果我用这个std::string
类中声明私有变量,我得到一个错误的错误: 'std' does not name a type.
那是因为你不能把一个标签,一个类定义,只有在一个代码块。 你必须把它写正确作为std::string
那里。 (如果类是在头文件中定义,然后using namespace std
比源文件更糟糕的想法,所以我劝你不要那样做。)
另外,如果你使用std::string
,那么你应该#include <string>
。 它看起来像你的代码的工作由事故由于<iostream>
拉动更多定义比它需要的,但你不能可移植性依靠这一点。
您需要包括串类的头:
#include <string>
这段代码有一个错字,缺了第二个冒号
std:string N;
应该:
std::string N;
以单冒号,就变成了跳转,这可能不是你的意思的标签。
第一个问题:
首先,你缺少#include <string>
指令。 可以不依赖于其它标题(如<iostream>
至#include
所述<string>
自动报头。 除此之外:
第二个问题:
写入字符串声明为STD:字符串也能正常工作。 有什么不同。
那是因为你有一个(恶) using
指令在全局命名空间范围:
using namespace std;
该指令的效果是,从所有名称std
命名空间被导入到全局命名空间。 这就是为什么完全合格std::string
和不合格的string
解析为同一类型。
如果省略了using namespace std;
指令时,你会使用不合格时,得到一个编译错误string
名称。
第三个问题:
如果我使用一个类中该的std :: string声明一个私有变量,我得到一个错误的错误:“性病”没有指定类型。 此声明示例:
你缺少一个冒号。 这应该是:
std::string
// ^
并不是
std:string
// ^
写入字符串声明为STD:字符串也能正常工作。 有什么不同。
没有区别,除非你声明别的东西叫string
。 在代码中, string
并std::string
指的是同一类型。 但要避免using namespace std
不惜一切代价。
如果我使用一个类中该的std :: string声明一个私有变量,我得到一个错误的错误:“性病”没有指定类型。 此声明示例:
你需要#include <string>
,以便使用std::string
。 正在发生的事情是,你的第一个代码示例中, <iostream>
似乎包括<string>
。 你不能依靠这一点。 你必须包括<string>
。