2015-04-29 83 views
-2

我使用下面不能與對象

public struct TPCANMsg 
{ 
    /// <summary> 
    /// 11/29-bit message identifier 
    /// </summary> 
    public uint ID; 
    /// <summary> 
    /// Type of the message 
    /// </summary> 
    [MarshalAs(UnmanagedType.U1)] 
    public TPCANMessageType MSGTYPE; 
    /// <summary> 
    /// Data Length Code of the message (0..8) 
    /// </summary> 
    public byte LEN;  
    /// <summary> 
    /// Data of the message (DATA[0]..DATA[7]) 
    /// </summary> 
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] 
    public byte[] DATA; 
} 

所示的結構出入聲明結構,那麼申報結構對象下面

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Peak.Can.Basic; 

namespace rcToOnBoardPC 
{ 
    class Communication 
    { 
     // CAN Status Decalaration 
     TPCANStatus gStatus; 
     // List of CAN Messages 
     TPCANMsg msg1 = new TPCANMsg();  
     msg1.ID = 0x100; 

    } 
} 

我獲得以下錯誤「錯誤1個無效令牌在類,結構或接口成員聲明中'='。「 無法理解,爲什麼我無法訪問具有相應對象的結構。請指導。

+3

'msg1.ID = 0x100;'在一個方法之外浮動,把它放在ctor中? –

+0

或者只是'TPCANMsg msg1 =新的TPCANMsg {ID = 0x100};' –

+0

@AlexK。請詳細說明「ctor」。請儘量用簡單的話來說。在編程方面,我的裝備不如你。一個例子是優選的。在提問時一定要清楚,我希望專家在給出答案時更清楚。 –

回答

0

由於這個問題涉及到一個簡單的印刷錯誤,它可能應該像這樣關閉,最終很可能會這樣。

與此同時,這裏是評論者試圖告訴你的東西......

最基本的問題是你寫了一個程序語句以外的方法。在C#中(實際上,任何類似的語言),這是不允許的。程序語句需要包含在方法中(又名「函數」)。

您可以通過以下兩種方法之一來解決問題。最容易理解的就是把本聲明的方法(即你對運行了語言規則直接遵守):

class Communication 
{ 
    // CAN Status Decalaration 
    TPCANStatus gStatus; 
    // List of CAN Messages 
    TPCANMsg msg1 = new TPCANMsg(); 

    public Communication() 
    { 
     msg1.ID = 0x100; 
    } 
} 

來解決這個問題依賴於一個事實的第二種方式,雖然程序陳述不能存在於方法之外,您可以在各種上下文中使用表達式,包括初始值設定項。而且C#有一個初始化語法,它允許您將賦值語句作爲初始化的一部分。即從技術上講,你只是寫一個初始化表達式,但在這種情況下,你可以編寫一小段代碼,只要它包含的唯一類型的程序語句是一個賦值,即使它不在方法中也是合法的

這種做法是這樣的:

class Communication 
{ 
    // CAN Status Decalaration 
    TPCANStatus gStatus; 
    // List of CAN Messages 
    TPCANMsg msg1 = new TPCANMsg { ID = 0x100 }; 
} 

注意,使用該語法時,您也允許從參數的構造函數的調用省略括號()。這不是必需的;如果你更喜歡寫作new TPCANMsg() { ID = 0x100 },那也是可以的。

+0

非常感謝,我想通了,但仍然是一個非常好的答案,並讚賞花時間幫助像我們這樣的人。我希望更多的人有耐心展現。不能,謝謝你...... –