C++ Error: undefined reference to `main'

2020-02-28 04:02发布

I'm working on a simple class List, but when compiling the header and cpp file, I get the error: undefined reference to `main'

What am I doing wrong, and how could I fix this?

Here is the list.h file that has simple headers:

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

And here is the list.cpp file:

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];
};

I tried experimenting around with "using namespace std" and how to include , but I can't figure out how to get these errors to go away. What is causing them?

标签: c++
2条回答
Emotional °昔
2楼-- · 2020-02-28 04:30

Undefined reference to main() means that your program lacks a main() function, which is mandatory for all C++ programs. Add this somewhere:

int main()
{
  return 0;
}
查看更多
聊天终结者
3楼-- · 2020-02-28 04:39

You should be able to compile list.cpp, you can't link it unless you have a main program. (That might be a slight oversimplification.)

The way to compile a source file without linking it depends on what compiler you're using. If you're using g++, the command would be:

g++ -c list.cpp

That will generate an object file containing the machine code for your class. Depending on your compiler and OS, it might be called list.o or list.obj.

If you instead try:

g++ list.cpp

it will assume that you've defined a main function and try to generate an executable, resulting in the error you've seen (because you haven't defined a main function).

At some point, of course, you'll need a program that uses your class. To do that, you'll need another .cpp source file that has a #include "list.h" and a main() function. You can compile that source file and link the resulting object together with the object generated from list.cpp to generate a working executable. With g++, you can do that in one step, for example:

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

You have to have a main function somewhere. It doesn't necessarily have to be in list.cpp. And as a matter of style and code organization, it probably shouldn't be in list.cpp; you might want to be able to use that class from more than one main program.

查看更多
登录 后发表回答