1

この例は、これから取り上げる資料から引用しています。教科書によると、ここでは万事順調です。

しかし、これらのファイルをコンパイルしようとすると、問題が発生します (以下を参照)。

3 ファイル

Date.cpp:

    #include "Date.h"

    Date::Date()
    {
        setDate(1,1,1900);
    }

    Date::Date(int month, int day, int year)
    {
        setDate(month, day, year);
    }

Date.h:

class Date
{
public:
    Date ();
    Date (int month, int day, int year);

    void setDate(int month, int day, int year);
private:
    int m_month;
    int m_day;
    int m_year;
};

Main.cpp:

#include "Date.h"

int main () 
{
    Date d1 ;

    return 1;
}

でコンパイルしようとするとg++ *

Undefined symbols for architecture x86_64:
  "Date::setDate(int, int, int)", referenced from:
      Date::Date()  in cc8C1q6q.o
      Date::Date()  in cc8C1q6q.o
      Date::Date(int, int, int) in cc8C1q6q.o
      Date::Date(int, int, int) in cc8C1q6q.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

代わりに宣言Date *d;すると、プログラムがコンパイルされます。代わりに宣言Date *d = new Dateすると、プログラムは失敗します。

ここで何が起こっているのですか?

4

3 に答える 3

3

setDateクラスにメソッドを提供していません。ヘッダー ファイルで宣言しますが、実際のコードも提供する必要があります。

表示されているエラーは、リンカ ( ) が、そのメソッドを呼び出そldうとするコードがありますが、リンカはそれがどこにあるかを認識していないことを示しています。

以下を に入れるなど、メソッドを提供する必要がありますDate.cpp

void Date::setDate (int month, int day, int year) {
    m_month = month;
    m_day = day;
    m_year = year;
}
于 2012-08-16T04:07:53.890 に答える
2

両方のコンストラクターから呼び出す関数 setDate は未定義です

.cpp ファイルのようなものが必要です

  void  Date::setDate(int month, int day, int year)
        {
            //code
        }
于 2012-08-16T04:08:27.243 に答える
2

定義したことがないようですDate::setDate()

于 2012-08-16T04:08:27.713 に答える