0

複素数の動的にリンクされたリストを書き込もうとしています。基本的に: classlistを含む構造numberを含むクラスがありcomplexます。ボックスインボックスインボックス。複素数自体の参照に問題があります(ノードを追加する関数しかありません。これまでの私のコード:

複雑な.h

class complex
    {
    public:   
        float r;
        float i;
    };

list.h

#include "complex.h"
class list

{

public: 
typedef struct number
{
    complex a;

    struct number *next;
}number;

number *number;

public:
        void add(number* number,complex b);
        list();
        ~list();

};

list.cpp (関数 add を含み、動作しません)

void list::add(number* number, complex b)
{
        number *newo=new number;        

         while (number->next != NULL)         
             { 
             number = number->next;
             }

          newo = malloc (sizeof(number)); 
          newo->a::r = b::r;  
          newo->a::i = b::i; 
          newo->next = NULL;                
          number->next = newo;      

}

手伝ってくれてありがとう ;)

4

2 に答える 2

3

これらの行

      newo->a::r = b::r;  
      newo->a::i = b::i; 

する必要があります

      newo->a.r = b.r;  
      newo->a.i = b.i; 

またはさらに簡単にあなたは書くことができます

      newo->a = b;  

あなたが持っている他の問題は

1)番号ノードを2回割り当てます。1回は。でnew、もう1回は。で割り当てますmalloc。一度だけ実行し、を使用しますnew

list2)番号はクラス内の初期化されていないポインタのようです。これにより、プログラムがクラッシュします。list数値をNULLに初期化するコンストラクターを記述します。

3)の論理list::addが間違っています。数値がNULLであっても、最初に行うことはnumber->next、プログラムをクラッシュさせることです。

4)名前はいたるところにあります(他の人が指摘しているように)。すべてに適切な名前を選択してみてください。自分のコードを理解するのに役立ちます。

于 2012-11-06T16:17:36.027 に答える
0

list.h でメンバー番号を変更します (これは、リストの先頭から number *head; になっていると思います)。

関数Addは意味をなさない。私はそのようにします:

void list::add(complex b)
{
        number *newo = new number;        
        newo->a::r = b.r;  
        newo->a::i = b.i; 
        newo->next = NULL;                

        if(!head)
        {
            //first item
            head = newo;
        }
        else
        {
            number *itr = head;
            while (itr->next != NULL)         
            { 
                itr = itr->next;
            }
            itr->next = newo;
        }
}
于 2012-11-06T16:21:24.707 に答える