作者KATORU (欢迎加入NHK!!!)
看板C_and_CPP
标题[问题] c++的constructor使用问题
时间Sun Mar 29 21:21:02 2009
以下是部份程式码...
-------------------------------------------------
class Counter
{
public:
Counter();
Counter(int max);
int getDollar();
private:
int dollar;
int maximum;
};
int main()
{
int max=0;
cout<<"========测试用计算=========\n";
cout<<"请输入最大计算值(预设请输入0): ";
cin>>max;
system ("cls");
if (max<=0)
{ Counter obj; system ("cls");}
else
{ Counter obj(max); system ("cls");}
...
...
if (obj.getDollar())
{ /*balabalabala...*/ }
}
---------------------------------------------
compiler後, error问题都会在if (obj.getDollar())这行
说明是说"obj没有宣告"
然後我看了一下, 问题似乎都在这个if判断式
if (max<=0)
{ Counter obj; system ("cls");}
else
{ Counter obj(max); system ("cls");}
我将这整段if else都拿掉, 改成Counter obj; 之後
compiler就会过了...
想请问一下这边是本来就不能这样用吗!?
还是我忘记定义什麽...@@
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.165.108.59
1F:→ james732:是 scope 的问题 请把 Counter obj 提到 if 外面 03/29 21:22
2F:→ KATORU:那如果我想要利用输入来选择执行的建构子应该要怎麽写..!? 03/29 21:24
3F:→ KATORU:EX:输入100就执行obj(100); 输入0或没有输入就执行obj(); 03/29 21:24
4F:→ james732:唔 我只想得到用 new 而已... 03/29 21:26
5F:推 kvykn:james732正解. obj在离开if宣告的scope就会销毁了 03/29 21:37
6F:→ kvykn:之後的程式码你想用obj当然不给用. 03/29 21:38
7F:→ KATORU:orz 那无解了吗... 03/29 21:48
8F:推 POSIX:先宣告一个 Counter* obj, if else 内用new assign 03/29 22:08
9F:→ POSIX:"宣告" 不要在run time 去判断要不要做, 非得这麽做 只好用 03/29 22:10
10F:→ POSIX:dynamic allocation 的方式 03/29 22:10
11F:→ KATORU:3Q以上解答~ 小的清楚多~ 03/29 22:49
12F:推 POSIX:如果是推文中的需求 你可以考虑constructor overloading 03/29 23:48
13F:→ POSIX:和default arguments assign 应该可以达到你想要的目的 03/29 23:48
14F:推 kvykn:就是new阿 = = james不是说了 03/30 23:29