2009-12-17 63 views
-1

是內部有一種方法來定義std::stringstd::stringstream內部ifmain函數作爲參數限定字符串流和字符串如果

例如

main(int d,int m) 
{ 
if(std::cin>>d) 
{} 
if(std::stringstream ss,std::string s) 
{} 


} 

它給錯誤

expected primary-expression before ‘ss’ 
error: expected `)' before ‘ss’ 
+1

這沒有任何意義。你想達到什麼目的? – mch 2009-12-17 06:28:32

+0

只是試圖寫一個沒有分號的代碼 – d3vdpro 2009-12-17 06:30:31

+0

請參閱http://stackoverflow.com/questions/1919574/ - 爲什麼任何人想這樣做是超出了我的。 – 2009-12-17 06:31:13

回答

0

任何返回任何值的函數都可以在裏面完成,但是你不能在th中聲明變量在,真的很無聊。

這是可以做到的printf會返回一些值,如果將檢查返回值條件

if(printf("Hello")) 

,但不是這個

if(std::string str) 
+0

-1,錯誤。這是有效的:'if(int fooResult = foo()){...}'。適用於任何類型轉換爲'bool' – MSalters 2009-12-17 11:54:03

+0

在這裏你使用一個變量來保存返回類型,然後檢查返回類型是否與我在第一個if語句中寫的if語句類似,我說的是if( std :: string str)是無效的,不像if(int a = getInt())。如果語句 – Vivek 2009-12-18 05:50:13

3

由於這是C++ main必須有一個返回類型在它的聲明。您收到的實際錯誤似乎表明您需要在某個時刻使用#include <sstream>

雖然你可以在if的條件表達式中聲明一個變量,但它不是一個經常使用的特性,而且構造的一個對象必須有一個有效的隱式轉換序列,它的編號爲bool。您不能使用,嘗試聲明兩個變量,它不是if子句的有效表達式。

如果構建任何對象失敗,則必須拋出異常,因此這不是測試構造失敗的必要或正確方法。您應該只需在main的函數範圍內聲明您的變量。

+0

在C++中,主函數的「return 0」語句是隱含的,那麼首先理解我說的和註釋就像if(std :: string str)和if(int fooResult = foo())是不同的:http:/ /www2.research.att.com/~bs/bs_faq2.html#void-main – 2009-12-17 07:53:53

+0

@lx:感謝您發現不清楚的措辭。我的意思是完全不同的東西,我在編輯中已經修復過。 – 2009-12-17 07:57:30

0

唯一有效的模式是:

Base* b = ...; 
if (Derived* d = dynamic_cast<Derived*>(b)) { 
    d->stuff(); 
}