2012-11-13 141 views
1

我正在學習C++,並且有一個簡單的Date類,我試圖爲Date設置一個值。C++錯誤 - 架構x86_64的未定義符號:

這裏是源代碼文件 -

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 

有人可以幫忙嗎?

謝謝

回答

5

你錯過了一個主要功能。將其添加到新文件(如main.cpp,並在編譯和鏈接時包含它)或其他.cpp文件。

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

並把你的代碼運行在大括號中的程序。

1

每個C/C++程序都必須有一個main函數,該函數無條件地作爲程序執行的入口點。

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所做的參數並通過初始化程序列表將它們分配給您的成員變量。在這種情況下,默認構造函數(無參數)對於具體的日期類沒有多大意義。

相關問題