Estoy trabajando en una simple Lista de la clase, pero al momento de compilar el encabezado y el archivo cpp, me sale el error: undefined reference to `principal’

¿Qué estoy haciendo mal y cómo podría solucionar este problema?

Aquí está la lista.h archivo que tiene encabezados simples:

lista.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

Y aquí está el list.cpp archivo:

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

Traté de experimentar un poco con «using namespace std» y cómo incluir , pero no puedo averiguar cómo conseguir que estos errores se vaya. Cuál es la causa de ellos?

  • Donde es la función principal?
  • Usted necesita un int main() función.
  • A menos que su programa no es un ejecutable, el main función es obligatorio. Tienes que crear el main función para generar la aplicación.
  • Muchas gracias! Se me olvidó y sabía que me estaba perdiendo algo.
InformationsquelleAutor smileham | 2013-01-31

2 Comentarios

  1. 10

    Indefinido referencia a main() significa que el programa carece de una función main (), la cual es obligatoria para todos los programas de C++. Agregar de este lugar:

    int main()
    {
      return 0;
    }
  2. 17

    Usted debe ser capaz de compilar list.cpp, usted no puede enlace a menos que tenga un programa principal. (Que podría ser una simplificación.)

    La compilación de un archivo de origen sin la vinculación depende de lo compilador que se está usando. Si usted está usando g++, el comando sería:

    g++ -c list.cpp

    Que generará un fichero objeto que contiene el código máquina para su clase. Dependiendo del compilador y el sistema operativo, se podría haber llamado list.o o list.obj.

    Si, en lugar de tratar:

    g++ list.cpp

    va a asumir que usted ha definido un main función y tratar de generar un ejecutable, lo que resulta en el error que he visto (porque no definido un main función).

    En algún punto, por supuesto, usted necesitará un programa que utiliza su clase. Para hacer esto, usted necesitará otro .cpp archivo de origen que tiene un #include "list.h" y un main() función. Usted puede compilar el archivo de origen y vincular el objeto resultante junto con el objeto generado a partir de list.cpp para generar un trabajo ejecutable. Con g++, usted puede hacer eso en un solo paso, por ejemplo:

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

    Usted tiene que tener un main función en algún lugar. No necesariamente tiene que ser en list.cpp. Y como una cuestión de estilo y la organización del código, que probablemente no debería estar en list.cpp; usted puede ser que desee ser capaz de utilizar esa clase de más de un programa principal.

Dejar respuesta

Please enter your comment!
Please enter your name here