Вопрос по c++ – Ошибка C ++: неопределенная ссылка на `main '

10

Я работаю над простым классом List, но при компиляции заголовочного файла и файла cpp я получаю ошибку: неопределенная ссылка на `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];
};

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

Где основная функция? chris
Спасибо вам большое! Я полностью забыл и знал, что что-то упустил. smileham
Вам нуженint main() функция. Yuushi
Если ваша программа не является исполняемым файлом,main функция обязательна Вы должны создатьmain Функция для создания приложения. sgarizvi

Ваш Ответ

2   ответа
10

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

int main()
{
  return 0;
}
15

компилировать 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; Вы можете захотеть использовать этот класс из более чем одной основной программы.

Похожие вопросы