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

Can't compile simple C++ program, clarification needed

本文关键字:程序 C++ 编译 简单      更新时间:2023-10-16

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

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

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

请问这是怎么回事?

您尚未为类提供setDate方法。您可以在头文件中声明它,但您还需要为其提供实际代码

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

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

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

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

您需要类似.cpp文件中的内容

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

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