1. ホーム
  2. c++

[解決済み] エラーです。ファイル内で最初に参照されたシンボルが未定義です

2022-02-02 01:08:48

質問

このようなエラーが発生するのですが、どうしたらいいのかわかりません。 リクエストのコンストラクタは文字列型を取りますが、request.hファイルで適切に実装されていないようです。 エラーです。

Undefined           first referenced
 symbol                 in file
Request::Request(char *, int, int)  threadtest.o
ld: fatal: Symbol referencing errors. No output written to nachos

のコードになります。

class Request
{
 public:
  //constructor intializes request type                                                              

  Request(char *u, int rqtID, int rqtrID);
  char *url;
  int requestID;
  int requesterID;


};

コンストラクタが定義されている request.cc ファイル

#include "request.h"

    Request :: Request(char *urll, int requestIDD, int requesterIDD )
    {
      url = *urll
      requestID = requestIDD;
      requesterID = requesterIDD;

    }

解決方法は?

まず、エラーの内容を理解することから始めましょう。

<ブロッククオート

ld: fatal: シンボル参照エラー。 nachosに書き込まれた出力はありません

これは、リンクの問題であることを意味します。リンカーはいくつかのシンボルの定義を見つけることができません。

ファイル内で最初に参照されたシンボルが未定義である リクエスト::リクエスト(char *, int, int) threadtest.o

ここで重要なのは - Request::Request(char *, int, int)threadtest.o . つまり、ソースファイル名 threadtest.cpp をインスタンス化しているところです。 Request オブジェクトを作成します。ヘッダを含むことを理解すること ( おそらく Request.hthreadtest.cpp ) は、コンパイラが宣言を見つけるのに役立ちます。リンカはすべてのオブジェクトファイルからシンボルの定義を探し出し、実行形式を作成しようとします。

ということは、もしかしたら Request.cpp をリンクし忘れたり Request.o .