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?
Undefined reference to main() means that your program lacks a main() function, which is mandatory for all C++ programs. Add this somewhere:
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: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
orlist.obj
.If you instead try:
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 amain
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 amain()
function. You can compile that source file and link the resulting object together with the object generated fromlist.cpp
to generate a working executable. Withg++
, you can do that in one step, for example:You have to have a
main
function somewhere. It doesn't necessarily have to be inlist.cpp
. And as a matter of style and code organization, it probably shouldn't be inlist.cpp
; you might want to be able to use that class from more than one main program.