作者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