Ошибка С++: undefined ссылка на `main '

Я работаю над простым списком классов, но при компиляции файла заголовка и cpp я получаю сообщение об ошибке: undefined ссылка на `main '

Что я делаю неправильно, и как я могу это исправить?

Вот файл list.h, который имеет простые заголовки:

list.h

#ifndef LIST_H
#define LIST_H

#include <string>

const int DEFAULT_CAPACITY = 100;

class List
{
    public:
        List();
        List(int capacity);
        ~List();
        void push_back(std::string s);
        int size() const;
        std::string at(int index) const;

    private:
        std::string* mData;
        int mSize;
        int mCapacity;
};

#endif

И вот файл list.cpp:

list.cpp

#include "list.h"
#include <string>

List::List(){
    mData = new std::string[DEFAULT_CAPACITY];
    mSize = 0;
    mCapacity = 100;
};

List::List(int capacity){
    mData = new std::string[capacity];
    mSize = 0;
    mCapacity = capacity;
};

List::~List(){
    delete[] mData;
};

void List::push_back(std::string s){
    if (mSize<mCapacity){
        mData[mSize] = s;
        mSize++;
    }
};

int List::size() const{
    return mSize;
};

std::string List::at(int index) const{
    return mData[index];
};

Я пробовал экспериментировать с "using namespace std" и как включить, но я не могу понять, как заставить эти ошибки уйти. Что вызывает их?

Ответ 1

Undefined ссылка на main() означает, что ваша программа не имеет функции main(), которая является обязательной для всех программ на С++. Добавьте это где-нибудь:

int main()
{
  return 0;
}

Ответ 2

Вы должны скомпилировать list.cpp, вы не сможете связать его, если у вас нет основной программы. (Это может быть небольшое упрощение.)

Способ компиляции исходного файла без его привязки зависит от того, какой компилятор вы используете. Если вы используете g++, команда будет следующей:

g++ -c list.cpp

Это создаст объектный файл, содержащий машинный код для вашего класса. В зависимости от вашего компилятора и ОС его можно назвать list.o или list.obj.

Если вы попробуете:

g++ list.cpp

предполагается, что вы определили функцию main и попытаетесь сгенерировать исполняемый файл, в результате чего вы заметили ошибку (поскольку вы не определили функцию main).

В какой-то момент, конечно, вам понадобится программа, которая использует ваш класс. Для этого вам понадобится другой исходный файл .cpp, который имеет функцию #include "list.h" и main(). Вы можете скомпилировать этот исходный файл и связать результирующий объект вместе с объектом, сгенерированным из list.cpp, для создания рабочего исполняемого файла. С помощью g++ вы можете сделать это за один шаг, например:

g++ list.cpp main.cpp -o main

У вас должна быть функция main. Это не обязательно должно быть в list.cpp. И, в зависимости от стиля и организации кода, это, вероятно, не должно быть в list.cpp; вы можете захотеть использовать этот класс из нескольких основных программ.

Ответ 3

Не забудьте сохранить свой код!

У меня была такая же ошибка.

В моем случае, когда я писал свой первый helloworld, я не ожидал, что в коде Visual Studio отключена функция автосохранения по умолчанию.