2015-07-20 60 views
-2

我想知道如何用C++ Builder編寫下面的代碼,用用Do Begin語句類似於Delphi。用C++ Builder做Do Begin語句

我試過with ComboBox->Text .... do ... try,它不工作。我試過只用do ComboBox->Text .... try,也沒有工作。

if (ComboBox->Text.operator==(String("C++ Builder XE7"))) 
    { 
    try 
    { 

    // do something 

    if ((Form1->Memo1->Lines->Text).Pos("<") !=0) 
     { 

     // do something 

     } 
    } 
catch(Exception &ex) 
    { 
    ShowMessage(ex.ToString()); 
    } 


if (ComboBox->Text.operator==(String("C++ Builder XE8"))) 
    { 
    try 
    { 

    // do something 

    if ((Form1->Memo1->Lines->Text).Pos("<") !=0) 
     { 

     // do something 

     } 
    } 
catch(Exception &ex) 
    { 
    ShowMessage(ex.ToString()); 
    } 
+1

C++沒有'with'語句。如果您在C++中尋求_exception safety_,您應該查看[RAII](https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization) – myaut

+1

@myaut:Delphi的'with'語句與異常處理無關。也許你正在考慮.NET的'using'語句? –

+0

這是C++嗎?什麼是所有這些對象?你爲什麼要調用'operator ==()'而不是'=='?讀者在這裏工作並不多,或者簡單理解。 –

回答

1

在C++中沒有等效於Delphi的with語句。在C++中最好的做法是使用指針/引用,例如:

TComboBox *cb = ComboBox; 
TStrings *lines = Form1->Memo1->Lines; 

if (cb->Text == "C++ Builder XE7") 
{ 
    try 
    { 
     // do something 

     if (lines->Text.Pos("<") != 0) 
     { 
      // do something 
     } 
    } 
    catch(const Exception &ex) 
    { 
     ShowMessage(const_cast<Exception&>(ex).ToString()); 
    } 
} 

if (cb->Text == "C++ Builder XE8") 
{ 
    try 
    { 
     // do something 

     if (lines->Text.Pos("<") != 0) 
     { 
      // do something 
     } 
    } 
    catch(const Exception &ex) 
    { 
     ShowMessage(const_cast<Exception&>(ex).ToString()); 
    } 
} 
+0

'@Remy:'所以我在使用'catch(const Exception&ex)'的時候出現了一些錯誤信息。這些錯誤是'E2522非const函數_fastcall異常:: toString()爲const對象調用'和'E2285找不到'運算符UnicodeString :: =(TByteDynArray)'的匹配項。所以通過使用'catch(Exception&ex)'不會在我的C++ Builder XE8中導致任何錯誤。非常感謝,雷米。 –

+1

爲了性能和安全性,您應該總是通過const引用來捕獲異常對象。然而,如果你需要對它們調用一個'const'方法,比如'ToString()',那麼你可以使用'const_cast'。我已經更新了我的答案以表明這一點。 –

+0

現在完全正常工作:-)。非常感謝,雷米。 :-) –