2012-02-24 80 views
2

我只是切換到C++,從C# 我寫C++中的鏈接列表的代碼運行它在Win32控制檯應用程序時遇到非常奇怪的錯誤,同時建立代碼的行爲很奇怪

我在評論中指出的3個錯誤,其餘的我不能打字,太多了。

using namespace std; 

class float_list 
{ 
    struct node 
    { 
     double data; 
     struct node *next; 
    }; 
     node *head; 
public: 

    float_list(void) 
    { 
     head = nullptr; 
    }; 

    void appendNode(double); 

}; 
//void float_list::appendNode(float num) 
//{ 
//  
//} 
void float_list::appendNode(double num) 
    { 
     node *newNode; 
     node *ptr; //here i am getting this Error error C3872: 
         //'0xa0': this character is not allowed in an identifier , 
         // how ever I changed its name again and again. 

     newNode = new node; 
     newNode->data = num; // here un declared identifier , 
         //also missing ; before this line 
     newNode->next = nullptr; 


    if (!head) 
    {  
     head = newNode; 
    } 
    else 
    {  
       ptr = head;   

       while (ptr->next) 
       { 
       ptr = ptr->next; 
       ptr->next = newNode; 
       }; 
     } 
    } 
+5

你從一個HTML頁面複製粘貼? IIRC,0xa0是nbsp。 – ninjalj 2012-02-24 18:39:44

+0

您是否複製了以Unicode格式保存的任何代碼? '0xa0'是一個不間斷的空間,可能無法被編譯器識別。 – Foggzie 2012-02-24 18:42:12

+1

在上一個'while'循環中有一個錯誤:'ptr-> next = newNode;'應該在循環外*。另外,最好爲列表維護* head *和* last *節點指針;這樣你就不需要在每個新的'appendNode'上重複遍歷整個列表。 – 2012-02-24 18:50:34

回答

7

的問題可能不是標識符,但白色的空間 周圍。 0xA0是非破壞性 空間的拉丁-1代碼。它不是輸入中的合法字符,並且由於某種原因,編譯器將其視爲標識符的一部分。如果沒有其他方法可行,請刪除該行並重新輸入,確保所有空格均爲正常空格。 (我不確定在Windows下,但我認爲控制空間或移位空間會進入不間斷的空間。)

4

錯誤抱怨0xa0字符,下面分號的錯誤是,我認爲,既造成該得到意外複製到你的代碼字符,這是一個Unicode字符,你不能看,但只是因爲你看不到它並不意味着它不在那裏,並且造成破壞!

5

其他人幫助您以無效的方式將代碼粘貼到您的代碼中;不過順便說一句,我認爲在你的上while循環有一個錯誤:ptr->next = newNode;應該是外循環:

void float_list::appendNode(double num) 
{ 
    // ... 
    if (!head) 
    {  
    head = newNode; 
    } 
    else 
    {  
    ptr = head;  
    while (ptr->next) 
    { 
     ptr = ptr->next; 
     // ptr->next = newNode; 
    }; 
    ptr->next = newNode; // here - at the end of the list 
    } 
} 

而且,最好是保持一個列表頭部和最後一個節點的指針;這樣你就不需要在每個新的appendNode電話上一遍一遍地遍歷整個列表。

+0

你的回答沒有解決這個問題,它是關於編譯錯誤,而不是功能缺陷。 – 2012-02-24 19:18:22

+5

@RobKennedy OP要求我在他的問題的評論中解釋我的這句話。所以我做了。其他人已經幫助他了解了以某種方式粘貼的無效角色。 – 2012-02-24 19:25:36

+0

謝謝@WillNess – 2012-02-25 06:40:16

1

我曾與0XA0不換行空格字符同樣的問題。我通過突出顯示單個字符來解決這個問題,使用^ C來複制它,然後用普通空間做一個Find and Replace All。您需要使用^ V將非破壞空間粘貼到「查找」字段中。