碰到一个神奇的问题:
//在head.h头文件中写如下代码:
class A
{
public:
string name;
A (string);
};
结果编译的时候出现name前缺少“;”,如果我真的在name前加上一个“;”,编译的时候这个问题就没了,你说神奇不?有人知道怎么解决吗?
如果把class A和源文件写在一起就没问了,搞的我莫名其妙。
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
最佳回答 专家已采纳C++为了安全,提供命名空间namespace的机制,指定了标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
string也是数据std命名空间的,因此在使用C++标识符时以及一些函数时,除了包含头文件还需要指定命名空间
。
使用命名空间有三种方式
①直接using namespace std;可以把左右std命名空间的内容全部引进来
这样使用定义变量,直接使用string name即可
②using std::string,指定引用某个标识符。定义变量的方法,同上
③不用using关键字使用指定命名空间,但是但定义变量时手动指定,
即每次使用string时,指定std命名空间。std::string name;其他std::cout,std::cin,std::endl或者std::setw(2)等用法类似都需要先包含头文件,在引入命名空间
在C++中
和是不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早些的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
因此,当使用时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现;当使用的时候,该头文件没有定义全局命名空间,必须使用namespacestd;这样才能正确使用cout。
C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
报告相同问题?
提交
相关推荐 更多相似问题
- 2013-12-29 10:42回答 1 已采纳 C++为了安全,提供命名空间namespace的机制,指定了标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。 string也是数据std命名空间的
- 2021-08-26 15:38回答 1 已采纳 我觉得你肯定不只是缺少头文件的问题,应该是缺少了某个库,包括头文件,lib和dll等。但是不知道你具体用的是什么东西
- 2020-07-02 20:42回答 2 已采纳 .h文件是不单独编译的,只有.c、.cpp这样的文件修改后才会自动重新编译。 所以你要清理一下工程或者选择重新编译
- 2018-01-05 02:07qq_15052871的博客 <string.h> #include #include "MD5Handler.h" /* * Class: sdk_quickpay_util_NdkGetInfoUtils * Method: getInfoJson * Signature: ()Ljava/lang/String; */ JNIEXPORT jstring JNICALL ...
- 2021-05-20 11:03QYcookie的博客 在C语言中使用对数函数的方法C语言log()函数:返回以e为底的对数值头文件:#include log() 函数返回以 e 为底的对数值,其原型为:double log (double x);log()用来计算以e为底的 x 的对数值,然后将结果返回。设...
- 2021-05-18 09:36胡辰的博客 在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏替换或宏展开。 宏定义是由源程序中的宏定义命令完成的。宏替换是由预处理程序自动完成的。 在C语言中,宏定义分为有参数和无参数两...
- 2021-10-16 19:39回答 1 已采纳 你重新建一个看看,确保当前文件没有损坏或删除
- 2019-04-25 23:40回答 2 已采纳 任何代码都存在“罕见的bug”,所以这句话如果没有所指,就是一句正确的废话。 但是我不认为你的老师能发现这样的bug。遇到bug这是一个概率问题,充分测试的代码,要发现bug,除非本身是逆向分析的高
- 2021-10-20 16:37回答 1 已采纳 你用的哪个编译器
- 2019-03-23 10:25退5不落5的博客 这就是一个标准输入输出的头文件声明,头文件声明写在定义文件(后缀名.c的文件)的头部,并在定义文件中具体实现 #include <stdlib.h> #include "mylib.h"这是两种声明头文件的方法,其中尖括号表示“到环境...
- 2019-04-15 16:16qiuyongheng的博客 最近要使用ceres库, 发现网上资料很少, 自己研究了几天, 终于成功编译出来了, 现在记录下来, 希望可以给遇到同样问题的开发者一些参考 步骤 下载ceres, eigen库 修改CMakeLists.txt编译配置 编写编译脚本 Android ...
- 2019-08-12 20:30Summer、苏的博客 如何在Mac下通过NDK来编译Ceres Android库前言准备工作修改Android.mk内容 前言 网上关于Ceres的安装教程很多,但是Ceres 安卓库真的是很少,Ceres官网对于Android版也更是一句话略过了。即使一些博客有涉及android...
- 2016-05-13 10:31回答 2 已采纳 你可以把头文件放到内核头文件目录下面,或者在makefile添加头文件路径
- 2021-08-07 20:36回答 4 已采纳 .h文件里把Input类定义和实现都写进去 可以理解为,在编译的时候,预编译器是把.h文件插入到.c/.cpp文件相应的#include 的地方后再进行编译的
- 2022-03-24 15:39回答 1 已采纳 把它加到工程目录里就行,它是核心文件,可以开启单片机,在main函数里可以用core文件的函数
- 2020-07-31 19:11顾文杰的博客 在头文件中加入或修改 inline 函数时,使用了该头文件的所有源文件都必须重新编译。 C++函数升级 struct升级 定义变量(结构体+变量名)struct Node; 结构体可以保存函数 结构体可以继承 结构体可以多态 结构体可以...
- 2020-12-28 20:25lyxnb_的博客 今天学习了Java这门语言,Java在Linux系统中使用,我感觉对新手比较不太友好,但是对于提高编程能力还是很有帮助的,话不多说开始分享干货 概述程序 程序=算法(解决问题的步骤)+数据结构(如何高效的存储和使用数据) ...
- 2020-03-26 11:39碎步の流年的博客 先从string下手吧,C中的string.h和C++中的string还是不同的,这里主要还是针对C++,首先,要包含string头文件 #include string构造函数和析构函数 常见的 string 类构造函数有以下几种形式: string strs //生成空...
- 2021-07-10 00:15回答 2 已采纳
- 2021-04-17 22:03rzO_KQP_Orz的博客 这是编译原理大作业的第一步:词法分析与语法分析,最终效果是构建出语法树。 学过编译原理都知道,词法分析要用... 推荐资料:《flex与bison(中文版)》、bison官方文档,做的过程中遇到问题在谷歌里搜索,
- 没有解决我的问题, 去提问