无法编译简单的C ++程序,需要澄清

时间:2012-08-16 04:06:04

标签: c++ syntax

我正在从我正在讨论的材料中借这个例子。根据教科书,一切都很好。

然而,在尝试编译这些文件时,我遇到了问题(见下文)

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时,程序失败。

请问这里发生了什么?

3 个答案:

答案 0 :(得分:3)

您尚未为班级提供setDate方法。您在头文件中声明它,但您也需要为它提供实际的代码

您看到的错误是链接器(ld)告诉您,虽然您有一段代码试图调用该方法,但链接器不知道它在哪里是

您需要提供方法,例如将以下内容放入Date.cpp

void Date::setDate (int month, int day, int year) {
    m_month = month;
    m_day = day;
    m_year = year;
}

答案 1 :(得分:2)

你关心从两个构造函数调用的函数setDate是未定义的

你需要类似你的.cpp文件

  void  Date::setDate(int month, int day, int year)
        {
            //code
        }

答案 2 :(得分:2)

您似乎从未定义过Date::setDate()