一个奇怪的问题!

subtop 2003-09-12 08:36:37
class A
{
public:
A(){cout<<"A create"<<endl;}
void put(){cout<<"A put"<<endl;}
};
class B:public A
{
int i;
public:
B(){cout<<"B create"<<endl;}
B(int j)
{
i = j;
cout<<"B create with value "<<j<<endl;
}
};

在main()函数中,我声明了两个A变量:
A a;//可以执行
A aa();//编译通过,但是单步调试时根本就不执行
如果是对后者编译器找不到合适的构造函数,那怎么能编译通过呢,考虑了很久没有结果,请各位高手指点一二!
...全文
24 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tryber 2003-09-13
  • 打赏
  • 举报
回复
A aa();被当成了函数声明了,我在vc60中编译这个:

#include "stdafx.h"
#include <iostream.h>
class A
{
public:
A(){cout<<"a create"<<endl;};
};

int main(int argc, char* argv[])
{
A a();
int b();
void* pf1=a;
void* pf2=b;
return 0;
}
输出:
testc.obj : error LNK2001: unresolved external symbol "int __cdecl b(void)" (?b@@YAHXZ)
testc.obj : error LNK2001: unresolved external symbol "class A __cdecl a(void)" (?a@@YA?AVA@@XZ)
Debug/testc.exe : fatal error LNK1120: 2 unresolved externals
subtop 2003-09-13
  • 打赏
  • 举报
回复
是的,我晕掉了!
按C++的语法规则是声明了一个返回A对象的函数:)
FreeSeagull 2003-09-13
  • 打赏
  • 举报
回复
A aa();被当成了函数声明吧。
subtop 2003-09-12
  • 打赏
  • 举报
回复
to jjiaming(黑客)
我当然知道不加()可以了啊,只是想探究一下类的构造函数啊,要不是朋友提出来,我还不会考虑这个问题的:)
subtop 2003-09-12
  • 打赏
  • 举报
回复
系统没有报错,只是不执行相应的构造函数,我学C++好长时间了,这个问题却搞不明白,晕啊,是一个朋友提出的问题。
我想应该是调用A缺省的没有参数的构造函数的啊,可是汇编后,根本没有相应的代码:
在VC6.0+ XP SP1中的汇编代码如下:
11: A aa;
004010B8 lea ecx,[ebp-4]
004010BB call @ILT+30(A::A) (00401023)
12: A a1();
13:
14: while(!_kbhit())
004010C0 call _kbhit (004017b0)
004010C5 test eax,eax
004010C7 jne main+2Bh (004010cb)
15: {
16: }
004010C9 jmp main+20h (004010c0)
17: return 0;
004010CB mov dword ptr [ebp-8],0
004010D2 lea ecx,[ebp-4]
004010D5 call @ILT+45(A::~A) (00401032)
004010DA mov eax,dword ptr [ebp-8]
18: }
我真的晕了,怎么会没有代码呢?
lif2000 2003-09-12
  • 打赏
  • 举报
回复
系统不会报错
jjiaming 2003-09-12
  • 打赏
  • 举报
回复
不要加()啊
加了()号表示调用一个普通函数
系统找不到一个bb()的函数,当然会报错了
  • 打赏
  • 举报
回复
A aa();//编译通过,但是单步调试时根本就不执行
----------------------------
为什么+()啊??
  • 打赏
  • 举报
回复
能执行么?
lif2000 2003-09-12
  • 打赏
  • 举报
回复
gz
echoher 2003-09-12
  • 打赏
  • 举报
回复
有的编译器A aa()的结果是相当于struct,根本就不用构造函数

或者说假设构造函数没有代码
lif2000 2003-09-12
  • 打赏
  • 举报
回复
编译器应该是会调用A::A()的压,在A aa()改为A aa(1)就会提示错误A::A()不存在参数
给A中添加int b;
A::A()中添加 b=10;
void main()
{
A a;
A aabb();
cout<<a.b;//正确
cout<<aabb.b;//错误
}
奇怪
subtop 2003-09-12
  • 打赏
  • 举报
回复
程序汇编后根本没有A aa();所对应的代码?我要晕了!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧