2013-05-07 2 views
0

Извините, что я очень новичок в этом, и я надеюсь, что кто-нибудь сможет немного поработать. Я беру класс структур данных и изучаю C++. Мы используем eclipse, и у меня возникают проблемы с созданием кода из учебника. Я работаю над Eclipse 3.5.2 на Mac OSX 10.7.5 на macbook pro.Ошибка сборки eclipse C++ Неопределенные символы для архитектуры x86_64: ld: символы (символы) не найдены для архитектуры x86_64

У меня есть следующие файлы:

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 

Заранее спасибо.

ответ

1

Программа должна содержать функцию main. Добавьте его в существующий файл .cpp или добавить новый .cpp файл в проект, что-то вроде этого:

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

Функция main является точкой запуска программы. Linker ожидает, что эта функция будет определена в одном из исходных файлов.

Смежные вопросы