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

本文介绍了作者在学习C++时遇到的防重复声明问题,导致类方法编译错误。问题出在将`ifndef`误写成`ifdef`。修正后的正确防重复声明规范以及其它可能的解决方案,如清理缓存、检查头文件冲突等。通过此案例,强调了编程中的细心和理解预处理指令的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

前段时间刚刚学习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

其他

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

后记

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

### 回答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、付费专栏及课程。

余额充值