没有找到架构x86_64的未定义符号

  • 本文关键字:未定义 符号 x86 c++ eclipse build-error
  • 更新时间 :
  • 英文 :


对不起,我对这个很陌生,希望有人能给点方向。我正在上数据结构课,学习c++。我们正在使用eclipse和我有问题,建立一些代码直接走出教科书。我在macosx 10.7.5上运行Eclipse 3.5.2。

我有以下文件:

List.h

// List.h
#ifndef _LIST_H_
#define _LIST_H_
#include <cstdlib>
class List {
public:
  List(size_t capacity=10); // constructor - allocates dynamic array
  List(const List &a); // copy constructor
  ~List(); // destructor
  int& operator[](size_t pos); // bracket operator
  List& operator=(const List &a); // assignment operator
  List& operator+=(const List &a); // += operator
  void append(int item);
  size_t size() const { return size_; }
private:
  void copy(const List &a);
  void resize(size_t new_size); // allocate new larger array
  int *data_; // dynamic array
  size_t size_; // size of dynamic array
  size_t capacity_; // capacity of dynamic array
};
inline int& List::operator[](size_t pos)
{
  return data_[pos];
}
#endif // _LIST_H_

List.cpp

// List.cpp
#include "List.h"
List::List(size_t capacity)
{
  data_ = new int[capacity];
  capacity_ = capacity;
  size_ = 0;
}
List::List(const List &list)
{
  copy(list);
}
List::~List()
{
  delete [] data_;
}
void List::copy(const List &list)
{
  size_t i;
  size_ = list.size_;
  capacity_ = list.capacity_;
  data_ = new int[list.capacity_];
  for (i=0; i<list.capacity_; ++i) {
    data_[i] = list.data_[i];
  }
}
List& List::operator=(const List &list)
{
  if (&list != this) {
    // deallocate existing dynamic array
    delete [] data_;
    // copy the data
    copy(list);
  }
  return *this;
}
List& List::operator+=(const List &list)
{
  size_t i;
  size_t pos = size_;
  if ((size_ + list.size_) > capacity_) {
    resize(size_ + list.size_);
  }
  for (i=0; i<list.size_; ++i) {
    data_[pos++] = list.data_[i];
  }
  size_ += list.size_;
  return *this;
}
void List::append(int item)
{
  if (size_ == capacity_) {
    resize(2 * capacity_);
  }
  data_[size_++] = item;
}
// should this method have a precondition? see end of chapter exercises
void List::resize(size_t new_size)
{
  int *temp;
  size_t i;
  capacity_ = new_size;
  temp = new int[capacity_];
  for (i=0; i<size_; ++i) {
    temp[i] = data_[i];
  }
  delete [] data_;
  data_ = temp;
}

构建完成后,控制台中出现以下内容:

**** Build of configuration Debug for project CList ****
make all 
Building file: ../List.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"List.d" -MT"List.d" -o"List.o" "../List.cpp"
Finished building: ../List.cpp
Building target: CList
Invoking: MacOS X C++ Linker
g++  -o "CList"  ./List.o   
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
make: *** [CList] Error 1

程序必须包含函数main。将它添加到现有的。cpp文件中,或者添加新的。cpp文件到项目中,如下所示:

int main(int argc, char** argv)
{
    // use List class here
    return 0;
}

函数main为程序起始点。链接器期望在一个源文件中定义这个函数

相关内容

  • 没有找到相关文章

最新更新