VS2019 后面有“::”的名称一定是类名或命名空间名 解决办法汇总

前言

前段时间刚刚学习C++的防重复声明,就自己随便写了下,结果发现实现类方法一直报错。在网上找了半天问题都不对,结果发现在防重复声明中,此处进行总结下,方便后期解决问题。

问题

在这里插入图片描述

解决

我的头文件声明

#ifdef __PRE_JUDGE__
#define __PRE_JUDGE__

class preJudge
{
public:
	int addPreJudge();
	int cutPreJudge();
};

#endif // __PRE_JUDGE__

ifndef写成了ifdef,只要修改过来即可。
原因在于还是做事不细心,结果找了半天,同时需要理解ifndefif not def就不会犯这样的错误了。

同样是防重复声明写错的情况:不是类或命名空间的名称的沙雕示范

注意防重复声明的规范写法如下:

#ifndef 标识符(保证唯一)
#define 标识符(保证唯一)

#endif

其他

在网上看到了其他的解决办法,链接一下:

后记

当然具体问题需要具体分析,但是在成长的过程中并不是每个细节都能够被把握的,因此多学多看多记吧。

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
中译本序, 每当我们看到一个新的软件,第一反应会是:为什么又要发明一个新软件?ggplot2是R世界里相对还比较年轻的一个包,在它之前,官方R已经有自己的基础图形系统(graphics包)和网格图形系统(grid包),并且Deepayan Sarkar也开发了lattice包,看起来R的世界对图形的支持已经足够强大了。那么我们不禁要问,为什么还要发明一套新的系统?, 设计理念, 打个比方,想想我们小时候怎样学中文的。最开始的时候我们要识字,不认识字就没法阅读和写作,但我们并不是一直按照一个个汉字学习的,而是通过句子和具体的场景故事学习的。为什么不在小学时背六年字典呢?那样可能认识所有的汉字。原因很简单,光有单字,我们不会说话,也无法阅读和写作。缺的是什么?答案是对文字的组织能力,或者说语法。, R的基础图形系统基本上是一个“纸笔模型”,即:一块画布摆在面前,你可以在这里画几个点,在那里画几条线,指哪儿画哪儿。后来lattice包的出现稍微改善了这种情况,你可以说,我要画散点图或直方图,并且按照某个分类变量给图中的元素上色,此时数据才在画图中扮演了一定的中心角色,我们不用去想具体这个点要用什么颜色(颜色会根据变量自动生成)。然而,lattice继承了R语言的一个糟糕特征,就是参数设置铺天盖地,足以让人窒息,光是一份xyplot()函数的帮助文档,恐怕就够我们消磨一天时间了,更重要的是,lattice仍然面向特定的统计图形,像基础图形系统一样,有直方图、箱线图、条形图等等,它没有一套可以让数据分析者说话的语法。, 那么数据分析者是怎样说话的呢?他们从来不会说这条线用#FE09BE颜色,那个点用三角形状,他们只会说,把图中的线用数据中的职业类型变量上色,或图中点的形状对应性别变量。有时候他们画了一幅散点图,但马上他们发现这幅图太拥挤,最好是能具体看一下里面不同收入阶层的特征,所以他们会说,把这幅图拆成七幅小图,每幅图对应一个收入阶层。然后发现散点图的趋势不明显,最好加上回归直线,看看回归模型反映的趋势是什么,或者发现图中离群点太多,最好做一下对数变换,减少大数值对图形的主导性。, 从始至终,数据分析者都在数据层面上思考问题,而不是拿着水彩笔和调色板在那里一笔一划作图,而计算机程序员则倾向于画点画线。Leland Wilkinson的著作在理论上改善了这种状况,他提出了一套图形语法,让我们在考虑如何构建一幅图形的时候不再陷在具体的图形元素里面,而是把图形拆分为一些互相独立并且可以自由组合的成分。这套语法提出来之后他自己也做了一套软件,但显然这套软件没有被广泛采用;幸运的是,Hadley Wickham在R语言中把这套想法巧妙地实现了。, 为了说明这种语法的想法,我们考虑图形中的一个成分:坐标系。常见的坐标系有两种:笛卡尔坐标系和极坐标系。在语法中,它们属于一个成分,可自由拆卸替换。笛卡尔坐标系下的条形图实际上可以对应极坐标系下的饼图,因为条形图的高可以对应饼图的角度,本质上没什么区别。因此在ggplot2中,从一幅条形图过渡到饼图,只需要加极少量的代码,把坐标系换一下就可以了。如果我们用纸笔模型,则可以想象,这完全是不同的两幅图,一幅图里面要画的是矩形,另一幅图要画扇形。, 更多的细节在本书中会介绍,这里我们只是简略说明用语法画图对用纸笔画图来说在思维上的优越性;前者是说话,后者是说字。, 发展历程, ggplot2是Hadley在爱荷华州立大学博士期间的作品,也是他博士论文的主题之一,实际上ggplot2还有个前身ggplot,但后来废弃了,某种程度上这也是Hadley写软件的特征,熟悉他的人就知道这不是他第一个“2”版本的包了(还有reshape2)。带2的包和原来的包在语法上会有很大的改动,基本上不兼容。尽管如此,他的R代码风格在R社区可谓独树一帜,尤其是他的代码结构很好,可读性很高,ggplot2是R代码抽象的一个杰作。读者若感兴趣,可以在GitHub网站上浏览他的包:https://github.com/hadley。在用法方面,ggplot2也开创了一种奇特而绝妙的语法,那就是加号:一幅图形从背后的设计来说,是若干图形语法的叠加,从外在的代码来看,也是若干R对象的相加。这一点精妙尽管只是ggplot2系统的很小一部分,但我个人认为没有任何程序语言可比拟,它对作为泛型函数的加号的扩展只能用两个字形容:绝了。, 至2013年2月26日,ggplot2的邮件列表(http://groups.google.com/group/ggplot2 )订阅成员已达3394人,邮件总数为15185封,已经成为一个丰富、活跃的用户社区。未来ggplot2的发展也将越来越依赖于用户的贡献,这也是很多开源软件最终的走向。, 关于版本更新, 原书面
### 回答1: 是的,后面有“::”的名称通常是类名命名空间。在C++中,双冒号用于指定作用域,可以用于访问类的成员或命名空间中的变量和函数。因此,当我们看到一个名称后面有双冒号时,通常可以推断出它是一个类名命名空间。 ### 回答2: 在计算机编程中,“::”符号是一种特殊的符号,它经常用于表示某个标识符的作用域或命名空间。 在C++、Java等面向对象编程语言中,类是一种重要的数据类型,用于封装数据和行为。而类名中的“::”符号表示该类的作用域,用于区分不同的类或命名空间。 例如,C++中的std命名空间是一个非常常用的命名空间,定义了很多标准库函数和类。我们可以使用“std::”来表示该命名空间,并访问其中定义的各种函数和对象。例如,“std::cout”就是一个输出流对象,用于输出程序的结果。 另外一个例子是C++中的静态成员变量。静态成员变量是属于类而不属于类的任何对象的变量。在使用静态成员变量时,需要使用“类名::变量”的形式来访问它。例如,“MyClass::count”就是一个表示类MyClass中对象个数的静态成员变量。 总之,“::”符号在计算机编程中是一个非常重要的标识符,用于表示不同的作用域或命名空间。熟练掌握这个符号的使用,可以让程序员更加清晰和准确地表达自己的想法,写出更加高效和可靠的代码。 ### 回答3: 在编程中,我们经常使用各种各样的名称来表示各种不同的事物,例如变量、函数类名命名空间等等。在这些名称中,有一种特殊的名称,即后面有“::”的名称一定类名命名空间。 首先,让我们来了解什么是命名空间。在C++中,命名空间是一种将相似的功能或类型的函数、类、变量等组织在一起的机制。命名空间可以帮助我们避免名称冲突,使得我们的程序更加模块化和可维护。在C++中,命名空间可以使用关键字“namespace”来定义,例如: ``` namespace math { int add(int x, int y) { return x + y; } } int main() { int result = math::add(1, 2); } ``` 在上面的代码中,我们定义了一个为“math”的命名空间,并在其中定义了一个为“add”的函数。在main函数中,我们使用“math::add”的方式调用这个函数。在这个调用过程中,“math::”就是命名空间限定符,它告诉编译器我们要调用的函数在哪个命名空间中。 类同样也是一种特殊的名称。类可以看做是一种模板或蓝图,用来描述某种具有共同行为和属性的对象。在C++中,我们可以使用关键字“class”或“struct”来定义类,例如: ``` class Person { public: Person(string _name, int _age) : name(_name), age(_age) {} void sayHello() { cout << "Hello, my name is " << name << ", I am " << age << " years old." << endl; } private: string name; int age; }; int main() { Person p("Alice", 20); p.sayHello(); } ``` 在上面的代码中,我们定义了一个为“Person”的类,其中包含了一个为“sayHello”的成员函数。在main函数中,我们使用“Person p”来定义了一个为“p”的Person对象,然后使用“p.sayHello()”的方式调用了它的成员函数。在这个调用过程中,“.”就是成员操作符,它告诉编译器我们要调用的函数或变量位于哪个类中。 因此,当我们看到一个名称后面有“::”的时候,我们就可以确定它是一个命名空间类名。通过使用命名空间限定符或成员操作符,我们可以在不同的作用域或类中访问函数、变量、类成员等等,从而实现代码的复用和模块化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值