`
aigo
  • 浏览: 2566850 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

超前引用问题---error C2079: '' uses undefined class

 
阅读更多

今天遇到了这样的错误:error C2079: 'xxx' uses undefined class 'yyy' 

不得不承认自己有土鳖的基因。本来是很普通的一件事情。
自己居然不知道。。直到今天为了做作业才发现。唉。直入正题。

比如说,我们先定义一个b类再定义一个a类,a的一个成员就是b,如下:

class b{
int i;
};

class a {
b val ;
};
 

这显然是可以的。

如果这个时候,要把b的定义放到后面去,大家都知道在前面先声明b,那么:

class b;

class a {
b val ;
};

class b{
int i;
};
 

这段对不对呢?如果不编译,直观感觉,我以前总以为是可以的。。

但其实是通过不了编译的。那么再改,把val换成对b的指针,这样:

class b;

class a {
b * val ;
};

class b{
int i;
};
 

然后就可以了。

那么,直接给出一条重要的结论:
超前引用不可使用类名来定义变量和函数的变量参数,只可用来定义引用或者指针。 

要解释其实是很简单的,因为编译器在处理类的时候,要为他的成员分配空间。

如果我们用指针,那么直接分配4个字节就可以了,就像:

class b;
class a;

class a {
b *val ;
};

class b{
a *val ;
};
 

但是,如果成员变量是类呢??

class b;
class a;

class a {
b val ;
};

class b{
a val ;
};
 

这种情况下,就好比把两面镜子对着放置一样。。

当处理到a的val的时候,发现是个b,那么给b留出空间,
为了知道给b留出多少空间,再看b,发现b的val是a,
那么又需要再知道该给a多少空间。。。

这个道理其实是很显然的。

所以,VC编译的时候说'xxx' uses undefined class 'yyy' 。 

也许你觉得这些是很显然的事情,自己写的时候不会犯这种傻。
那么要小心的就是STL了。比如说你list <myClass>。

而这个时候myClass是处于已定义状态,则没有问题。
如果这个时候myClass是处于声明状态,则会有很大的问题。

而VC6对STL报错的囧况,想必用过的人都知道。
往往都是一大堆,要从中提取有用的信息很不容易。
 

唉。。也许是我入门看的资料太瓜了。。虽然超前声明这个概念到处都提,
却没怎么见有人专门指出这点。。看来有时间还是要从头学学国外名著了。。。

今天发现这个问题,也是因为我们助教给的一堆接口及实现。

我现在真的是严重怀疑他究竟有没有编译通过。。。改了我半天。。

就算他通过了,也是俨然一不标准的用法。明显是留有逻辑黑洞的隐患的。

众所周知,VS可以编译好些VC不能编译的东西。。
原因是放宽了对标准的审核
 

又众所周知,DEV可以编译好些VC不能编译的东西。。
原因是VC对C++的有些标准实现上有问题
 
(比如using namespace std下的cout重载)

以前我对老师总是留一份怀疑的态度,而现在感觉要保持严重怀疑的态度。。。

这个戳瓢事浪费了我半个小时,自然也就不吝啬多花这半个小时来记之。

分享到:
评论

相关推荐

    超前支护装备-顶板耦合模型建立与分析

    针对超前支护存在的问题,通过叠加原理和有限差分原理,研究了超前支护装备-顶板之间相互作用力.采用叠加原理建立超前支护装备横、纵梁变形协调方程,并将其作为小支撑组的绝对位移.采用有限差分理论,并根据顶板的"三边...

    20210608-长江证券-石头科技-688169-家电品牌出海系列之二:走向世界的中国“智”造.pdf

    - 当前全球市场正处于技术升级驱动下的爆发期,海外市场增长速度超前于国内市场,显示了“供给推动需求”的市场特点。 2. 石头科技公司优势与成长性: - 过去五年中,石头科技已经证明了自己在扫地机器人领域的...

    常用集成电路名称功能一览表1

    - **CD4008**:4位超前进位全加器,用于高速的二进制加法运算。 - **CD4009**:六反相缓冲/变换器,提供信号隔离和电平转换。 - **CD4010**:六同相缓冲/变换器,同样用于信号的隔离与电平转换,但保持信号相位不变...

    【verilog】超前进位(Carry-look-ahead)结构的快速加法器

    要求采用超前进位(Carry-look-ahead)结构。 计算例子: 0110000010000000 + 1000000000000001 = 11110000010000001 (24704) + (-32767) = (-8063) 顶层模块名为add_tc_16_16,输入输出功能定义: 名称 方向 位宽...

    2021-2025年中国第三方输入法行业调研及经营发展战略研究报告.pdf

    - **超前性**:前瞻性地规划未来发展。 - **竞争性**:帮助企业获得竞争优势。 - **稳定性**:保持战略的连续性和稳定性。 - **风险性**:考虑可能面临的各种风险因素。 ### 二、市场调研 #### 发展现状 - **用户...

    自动控制原理 串联滞后-超前校正 (超前-滞后校正)Matlab

    自动控制原理 串联滞后-超前校正 (超前-滞后校正)Matlab 自动控制原理 串联滞后-超前校正 (超前-滞后校正)Matlab 自动控制原理 串联滞后-超前校正 (超前-滞后校正)Matlab 自动控制原理 串联滞后-超前校正 ...

    音频术语:音频爱好者、发烧友必备

    - **定义**: 相位超前补偿器,用于调整音频信号的相位关系。 - **应用场景**: 在音频处理中用于改善声音的清晰度和定位。 #### Adventure (惊险效果) - **定义**: 在音频制作中用于创造出紧张刺激的效果。 - **应用...

    常见4000系列中文名称

    CD4008: 4位超前进位全加器** - **功能**: 实现4位二进制数的加法运算。 - **应用场景**: 算术运算单元、计算器等。 **7. CD4009: 六反相缓冲/变换器** - **功能**: 包含六个反相缓冲器。 - **应用场景**: 信号...

    2021-2025年中国产业互联网行业调研及经营发展战略研究报告.pdf

    - **S2b2c模式**:供应商(S)、分销商(b)和消费者(c)之间形成的新商业模式。 - **产品再造**:利用新技术重新设计产品。 - **智慧运营**:运用大数据等技术优化运营过程。 - **组织进化**:组织结构的调整...

    ( (非常重要)数字电路型号资料.pdf )

    - **CD4008**:4位超前进位全加器,由NSC生产。 - **CD4009**:六反相缓冲/变换器,由NSC生产。 - **CD4010**:六同相缓冲/变换器,由NSC生产。 - **CD4011**:四2输入端与非门,由HIT/TI生产。 - **CD4012**:双4...

    1288《现代管理原理》试题及答案(2019.7).docx.docx

    - **超前性**:计划需要预见未来可能发生的情况。 - **普遍性**:各级管理者均需制定计划。 - **创造性**:制定计划时需考虑创新思路。 - **灵活性**:计划应能够适应环境变化。 4. **可口可乐公司的战略形式**...

    创新创业教程(第2版)第1章.docx

    - **善于解决问题**: 发现并解决问题。 - **勇于实践**: 敢于尝试新事物。 - **百折不挠**: 面对挫折仍能坚持。 - **造福人类**: 以改善人类生活为目标。 - **性格特征**: - **自信**: 相信自己的能力和想法。 ...

    智慧学院智能化项目规划设计方案PPT(45页).pptx

    - **适度超前**:考虑未来发展趋势和技术进步。 - **建设目标**:打造一个集人才培养、科学研究、技术创新、成果转化、智力服务、新兴产业培育于一体的高端研究生院。 #### 四、建设依据 - **执行规范**:遵循国家...

    XXXX年合肥观澜华庭群商招商定位方案(初稿).pptx

    - **适度超前**:通过适度的市场引导、形象提升和经营创新等方式,提前布局未来市场趋势。 - **全面竞争**:引进主力业态,提高商业集群效应,参与到金源商圈的竞争中去。 - **科学规划**:合理分配物业资源,确保...

    一个地产会所的总施工组织设计方案.docx

    - **超前原则**:装饰工程准备工作应提前进行。 - **关联原则**:装饰工程准备工作不仅要考虑装饰本身的要求,还需考虑与其他工程如结构、机电安装工程的关联。 - **覆盖原则**:准备工作应涵盖技术、经济、材料...

    2021-2025年中国EDA芯片设计软件行业调研及经营发展战略研究报告.pdf

    - **紧迫性**:中国EDA产业发展面临严峻挑战,包括核心技术受制于人等问题。 - **公司概况**: - **华大九天**:国内领先的EDA解决方案提供商之一。 - **芯禾科技**:专注于高速电路设计领域的EDA解决方案。 - **...

    电工电子学考试题及答案(答案)

    - 线电压超前相电压30°。 - **三角形连接**: - 线电压等于相电压。 - 线电流是相电流的√3倍。 - 线电流滞后相电流30°。 #### 七、交流铁心线圈电路的功率损耗 - **铜损**:电流流过线圈时产生的热损耗。 -...

    煤矿安全风险管控制度.doc

    该制度旨在通过科学的风险管理流程,对煤矿生产过程中的潜在危险进行识别、评估、监控、预警和控制,以实现安全风险的超前预控。 1. **危险源辨识与风险评估** - **培训**:在进行危险源辨识前,企业需对员工进行...

Global site tag (gtag.js) - Google Analytics