2012-02-24 1 views
2

は、Win32コンソールアプリケーションでそれを実行し、コードの振る舞いは私が、私はC# 私はC++でリンクリストのコードを書いたからC++への切り替え

を構築しながら、非常に奇妙なエラーが発生して、私は、コメント内に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

+0

Unicode形式で保存されたコードをコピー貼り付けしましたか? '0xa0'は改行しないスペースで、コンパイラによって認識されないことがあります。 – Foggzie

+1

最後の 'while'ループにエラーがあります:' ptr-> next = newNode; 'はループの外側*でなければなりません。また、リストの* head *と* last *ノードポインタの両方を維持する方が良いでしょう。そうすれば、新しい 'appendNode'ごとにリスト全体を何度も何度もトラバースする必要はありません。 –

答えて

7

問題はおそらく識別子ではなく、周囲の空白 です。 0xA0は、改行なしの スペースのLatin-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

あなたの答えは、コンパイルエラーについてのものであり、機能的な欠陥に関するものではありません。 –

+5

@ロブケネディOPは、私の発言を彼の質問に対するコメントで説明するように頼んだ。だから私はやった。他の人たちは、何らかの形で貼り付けられた無効な人物で彼を助けました。 –

+0

ありがとう@WillNess –

1

0xA0非改行スペース文字で同じ問題が発生しました。私は、単一の文字を強調表示し、^ Cを使用してそれをコピーしてから、Find and Replace Allを通常のスペースで行うことで解決しました。^Vを使用して、改行しないスペースを検索フィールドに貼り付ける必要があります。

関連する問題