超前引用与命名空间
摘要: 一般情况下,类型要在使用前定义,但是在一些特殊情况下,这种要求无法满足,例如两个类相互包含, 即两个类互相使用对方提供的方法。 更一般的情况,类A和类B需要彼此互相引用,这样必然有一个类会先被定义,而另外一个类后被定义,这样在先被定义的类引用后被定义的类的时候,就导致了所谓的超前引用。
使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突。在C++中,变量、函数和类都是大量存在的。如果没有命名空间,这些变量、函数、类的名称将都存在于全局命名空间中,会导致很多冲突。比如,如果我们在自己的程序中定义了一个函数toupper(),这将重写标准库中的toupper()函数,这是因为这两个函数都是位于全局命名空间中的。命名冲突还会发生在一个程序中使用两个或者更多的第三方库的情况中。此时,很有可能,其中一个库中的名称和另外一个库中的名称是相同的,这样就冲突了。这种情况会经常发生在类的名称上。比如,我们在自己的程序中定义了一个Stack类,而我们程序中使用的某个库中也可能定义了一个同名的类,此时名称就冲突了。namespace关键字的出现就是针对这种问题的。
阅读全文
posted @
2012-06-04 10:11 yycmmc 阅读(1017) |
评论 (0) 编辑
C++编译错误分析之-无法解析的外部符号
摘要: 一、如果使用了库文件:
1.libname.lib 库文件未引入,可使用“#pragma comment(lib, “ libname.lib”) ”语句添加 lib 引用,也可在项目依赖里添加。
2.某个类方法的实现部分未添加所属类标识。如, “CClassName::DoSomething(void) { //… }” 误写成了 “ CClassName::DoSomething(void) {// … } ”。
3.项目使用的库方法未添加可导出标识 "__declspec(dllexport)",在VS IDE 中,用一个宏来代替,如
阅读全文
posted @
2012-05-30 23:04 yycmmc 阅读(936) |
评论 (0) 编辑