2012-02-24 81 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将非破坏空间粘贴到“查找”字段中。