• Uncategorized

About c++ : C-Error-undefined-reference-to-main

Question Detail

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:


#ifndef LIST_H
#define LIST_H

#include <string>

const int DEFAULT_CAPACITY = 100;

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

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


And here is the list.cpp file:


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

    mData = new std::string[DEFAULT_CAPACITY];
    mSize = 0;
    mCapacity = 100;

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

    delete[] mData;

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

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?

Question Answer

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.

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;

You may also like...

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.