C++程序,不能通过编译

来源:百度知道 编辑:UC知道 时间:2024/05/22 14:43:16
#include<iostream>
#include<string>
using namespace std;

class a //这个类不能修改
{
public:
a()
{
str="ABC";
}
a(char *str)
{
this->str=str;
}
void show()
{
cout<<str<<endl;
}
private:
char* str;
};
void f(int i)
{
if(i<2)
{
a aObject;
}
else
{
a aObject("EFG");
}
aObject.show();
}
int main()
{
for(int i=0;i<5;i++)
{
f(i);
}
return 0;
}

请高手指点,谢谢

编译时提示 aObject.show();出错,实际上是因为aObject没有定义,虽然你在if ...else里都有定义,感觉反正两者至少有一个会运行到,所以也就会被定义到,但是实际上,确实是定义到了,只是出了if的大括号或者是else的大括号时,刚定义的东西就被删了,所以出了if....else的时候,就找不到aObject这个变量了,这有点像你在一个函数里面定义的变量要在另一个函数里用,会找不到一样(如果从内存上来看,确实是一样的道理)。

问题知道了,那就好改了嘛。
方法一 把show放到if...else里,反正你不管是if还是else最后都要用show

if(i<2)
{
a aObject;
aObject.show();

}
else
{
a aObject("EFG");
aObject.show();

}

方法二 把aObject变量定义为默认是赋给“abc”字符串,只有在i>2(也就是你的else)时,才给它赋"efg"字符串,最后最调用show函数就可以了。

a aObject;
if(i>2)
{
aObject = a("EFG");
}
aObject.show();

aObject.show();
这一句的位置不对,要么可以放在if语句里,或者就放在else里,放在了外面,就找不到aObject这个对象的定义。

if(i<2)
{
a aObject;
aObject.show();

}
else
{
a aObject("EFG");
aObject.show();

}

这样就可以了!

if(i<2)