我刚开始在OS X中使用sublime text 3和Clang ++作为我的C ++开发工具集(来自windows中的visual studio)。出于某种原因,我得到了#34;架构x86_64"的未定义符号。每当我尝试编译时都会出错。代码在VS中正常工作(没有错误/警告)。我的智慧结束了。任何帮助将不胜感激。提前谢谢。
我的代码如下:
w4.cpp
#include <iostream>
#include "Date.h"
using namespace std;
int main() {
Date Date1("Elon Musk", 2015, 2, 5);
Date Date2;
cout << "Displaying the Dates..." << endl;
Date1.display();
Date2.display();
cout << "Booking a new Date..." << endl;
if (!Date1.hasConflict(Date2))
Date2.book("Larry Page", 2015, 3, 14);
else
cout << "Sorry! This date is not available!" << endl;
cout << "Cancelling a Date..." << endl;
if (Date1.cancel())
cout << "The Date is cancelled successfully!" << endl;
else
cout << "There is no Date to cancel!" << endl;
cout << "Displaying the Dates..." << endl;
Date1.display();
Date2.display();
return 0;
}
Date.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include "Date.h"
#include <string.h>
void Date::book (const char name[], int year, int month, int day)
{
strcpy (_name,name);
if (year>=2015)
_year=year;
else
std::cout<<"Year is invalid!"<<std::endl;
if (month>=1 && month <=12)
_month=month;
else
std::cout<<"Month is invalid!"<<std::endl;
if (day>=1 && day<=31)
_day=day;
else
std::cout<<"Day is invalid!"<<std::endl;
}
bool Date::isAvailable() const
{
if (_name[0] == 0)
return true;
else
return false;
}
bool Date::cancel()
{
if (!isAvailable())
{
_month = 0;
_day = 0;
_year = 0;
_name[0] = 0;
return true;
}
else
return false;
}
bool Date::hasConflict (const Date &date) const
{
if (this->_day == date._day && this->_month == date._month && this->_year == date._year)
return true;
else
return false;
}
void Date::display() const
{
if (_year==0)
{
std::cout << "The date is not available to display!" << std::endl;
}
else
{
std::cout << _day << "/" << _month << "/" << _year << ": " << _name << std::endl;
}
}
Date::Date () {
_name[0] = 0;
_day=0;
_year=0;
_month=0;
}
Date::Date(const char name[], int year, int month, int day)
{
strcpy (_name,name);
if (year>=2015)
_year=year;
else
std::cout<<"Year is invalid!"<<std::endl;
if (month>=1 && month <=12)
_month=month;
else
std::cout<<"Month is invalid!"<<std::endl;
if (day>=1 && day<=31)
_day=day;
else
std::cout<<"Day is invalid!"<<std::endl;
}
Date::~Date(){
}
date.h
class Date {
private:
char _name[41];
int _year;
int _month;
int _day;
public:
void book (const char name[], int year, int month, int day);
bool isAvailable() const;
bool cancel();
bool hasConflict(const Date &date) const;
void display() const;
Date ();
Date (const char Name[],int,int,int);
~Date();
};
错误
Undefined symbols for architecture x86_64:
"Date::book(char const*, int, int, int)", referenced from:
_main in w4-fa745d.o
"Date::cancel()", referenced from:
_main in w4-fa745d.o
"Date::Date(char const*, int, int, int)", referenced from:
_main in w4-fa745d.o
"Date::Date()", referenced from:
_main in w4-fa745d.o
"Date::~Date()", referenced from:
_main in w4-fa745d.o
"Date::hasConflict(Date const&) const", referenced from:
_main in w4-fa745d.o
"Date::display() const", referenced from:
_main in w4-fa745d.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[Finished in 0.2s with exit code 1]
[shell_cmd: g++ "/Users/Tom/Desktop/untitled folder 2/w4.cpp" -o "/Users/Tom/Desktop/untitled folder 2/w4"]
[dir: /Users/Tom/Desktop/untitled folder 2]
[path: /usr/bin:/bin:/usr/sbin:/sbin]