1

私はC++を学んでいて、Dateの値を設定しようとしている単純なDateクラスを持っています。

ソースコードファイルは次のとおりです-

Date.h

class Date{ 
private:
    int month;
    int day;
    int year;

public:
    Date();
    void setDate(int m, int d, int y);

};

およびDate.cpp

#include "Date.h"

Date::Date()
{
    month = 1;
    day = 1;
    year = 80;

};

void Date :: setDate(int m1, int d1, int y1){
    month = m1;
    day = d1;
    year = y1;
};

ただし、コードをコンパイルすると、エラーメッセージが表示されます-

    Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

誰か助けてもらえますか?

ありがとう

4

2 に答える 2

5

main関数がありません。これを新しいファイル(main.cppなど、コンパイルおよびリンク時に含める)または他の.cppファイルに追加します。

int main(int argc, char *argv[]) {  }

そして、プログラムを実行するためのコードを中かっこで囲みます。

于 2012-11-13T01:29:44.373 に答える
1

mainすべてのC/C ++プログラムには、プログラム実行のエントリポイントとして無条件に機能する関数が必要です。

int main(int argc, char** argv) {
  Date d;
  d.setDate(11, 19, 1984);

  /* do something with this date... */

  return 0;
}

一般的な規則は、これをmain.cc/に配置main.cppし、この場合、との両方main.cppDate.cppコンパイルされ、同じターゲットバイナリにリンクされていることを確認することです。リンカは、解決できずに続行できませんmain(int, char**)。これが明らかな場合は、リンカーのコマンドラインをチェックして、含まれているソース/オブジェクトファイルmainが含まれていることを確認してください。

また、ランダムなC ++のベストプラクティスガイドライン:デフォルト以外のコンストラクターが必要です。このコンストラクターは、引数を取り、setDate初期化子リストを介してそれらをメンバー変数に割り当てます。この場合、デフォルトのコンストラクター(引数なし)は、具体的な日付クラスにはほとんど意味がありません。

于 2012-11-13T01:42:49.007 に答える