前提・実現したいこと
C++初心者です双方向連続リストのクラスを作っていたらエラーに出くわしました。助けてください。????????
発生している問題・エラーメッセージ
Visual Studio Codeでデバッグをしたところ、以下のようにコンパイルエラーが出たというメッセージは出てきましたがエラーは何も表示されませんでした。
次に、コマンドプロンプトでg++を使ってコンパイルをしたところ、以下のようなエラーメッセージが出てきました。
C:\XXX\XXX\AppData\Local\Temp\ccTqXjt6.o:linkedList.cpp:(.rdata$.refptr._ZN10linkedList3nilE[.refptr._ZN10linkedList3nilE]+0x0): undefined reference to `linkedList::nil' collect2.exe: error: ld returned 1 exit status
該当のソースコード
class linkedList{ public: struct n{ int key; struct n *previous , *next; }typedef node; static node *nil; linkedList(){ nil = (node *)malloc(sizeof(node)); nil->next = nil->previous = nil; } int getKey(int i){ node *current = nil->previous; int index = 0; while(true){ if(index == i) return current->key; ++index; current = current->next; } return 0; } void setKey(int i){ } void addFirst(int key){ node *x = (node *)malloc(sizeof(node)); x->key = key; x->next = nil->next; nil->next->previous = x; nil->next = x; x->previous = nil; } private: }; int main(){ linkedList *list = (linkedList *)malloc(sizeof(linkedList)); std::cout << "hi_1" << std::endl; list->addFirst(0); list->addFirst(1); list->addFirst(2); std::cout << list->getKey(0) << std::endl; std::cout << list->getKey(1) << std::endl; std::cout << list->getKey(2) << std::endl; }
理想の実行結果
hi_1 0 1 2
###追記
もともとのコードの class linkedList { 略 }; の後に一行
linkedList::node *linkedList::nil; と付け加えたら以前のようなリンクエラーはなくなり、コンパイルエラーもなくなりましたが例外が発生しました。どうすれば直せるのかさっぱりわからないので教えてください
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/23 13:21