Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Error: undefined reference to `main'

Tags:

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?

like image 234
smileham Avatar asked Jan 31 '13 07:01

smileham


People also ask

How do you fix undefined references to Main?

When we compile these files separately, the first file gives “undefined reference” for the print function, while the second file gives “undefined reference” for the main function. The way to resolve this error is to compile both the files simultaneously (For example, by using g++).

How do you fix undefined reference error in C?

Used the GCC compiler to compile the exp. c file. The error: undefined reference to function show() has appeared on the terminal shell as predicted. To solve this error, simply open the file and make the name of a function the same in its function definition and function call.

How do I fix undefined reference error in C++?

You can fix undefined reference in C++ by investigating the linker error messages and then providing the missing definition for the given symbols. Note that not all linker errors are undefined references, and the same programmer error does not cause all undefined reference errors.

What does undefined mean in C?

So, in C/C++ programming, undefined behavior means when the program fails to compile, or it may execute incorrectly, either crashes or generates incorrect results, or when it may fortuitously do exactly what the programmer intended.


Video Answer


2 Answers

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;
}
like image 22
Lundin Avatar answered Oct 07 '22 04:10

Lundin


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.

like image 86
Keith Thompson Avatar answered Oct 07 '22 06:10

Keith Thompson