g ++ ld:未找到架构x86_64的符号 - 没有更具体的错误消息

时间:2014-03-22 02:36:11

标签: c++ linker g++ ld

我一直试图解决这个问题好几个小时...... 我有一个头文件,实现文件和一个驱动文件。 HEADER:

class PhoneNumber
{
 private:

  const int MAXTEXTS;
  static int live;
  static int text; // number of total texts from all the phones.                                                                     
  string areaCode;
  string exchange;
  string line;
  int nlive;
  int ntext; // number of texts sent on this phone                                                                                   
public:

  static int MaxPhones;
  PhoneNumber();
  PhoneNumber(string, string, string, int);
  void inputPhoneNumber();
  void displayPhoneNumber();
  void sendText();
  void dialNum();
  int getLive();
  int getText();
  int getnLive();
  int getnText();
  static void addLive()
  {
    live++;
  }
  static void addText()
  {
    text++;
  }

};

实现:

int PhoneNumber::getnLive()
{
  return nlive;
}

int PhoneNumber::getnText()
{
  return ntext;
}

int PhoneNumber::getLive()
{
  return live;
}

int PhoneNumber::getText()
{
  return text;
}

错误消息:

habins-mbp:CS2000 Habin$ g++ -o PhoneNumber PhoneNumber.cpp PhoneNumberDriver.cpp

Undefined symbols for architecture x86_64:
  "PhoneNumber::live", referenced from:
      PhoneNumber::getLive() in PhoneNumber-f64d4d.o
      PhoneNumber::addLive() in PhoneNumber-f64d4d.o
  "PhoneNumber::text", referenced from:
      PhoneNumber::getText() in PhoneNumber-f64d4d.o
      PhoneNumber::addText() in PhoneNumber-f64d4d.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我使用g ++ -c,它会编译代码工作的含义。似乎static int live给了我很多麻烦。 一直试图解决这个问题超过10个小时,但无济于事。我要把电脑拍成两半!

请帮帮我

1 个答案:

答案 0 :(得分:1)

您应该在IMPLEMENTATION部分中定义所有静态成员变量。

int PhoneNumber::live;
int PhoneNumber::text;
int PhoneNumber::MaxPhones;