0

抱歉,我对此很陌生,希望任何人都可以提供一些指导。我正在学习数据结构课程并学习 C++。我们正在使用 eclipse,并且在直接从教科书中构建一些代码时遇到了问题。我在 Macbook pro 上的 Mac OSX 10.7.5 上运行 Eclipse 3.5.2。

我有以下文件:

列表.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_

列表.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

提前致谢。

4

1 回答 1

1

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

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

函数main是程序的起点。链接器希望此函数在源文件之一中定义。

于 2013-05-07T05:01:56.643 回答