Ответ 1
Undefined ссылка на main() означает, что ваша программа не имеет функции main(), которая является обязательной для всех программ на С++. Добавьте это где-нибудь:
int main()
{
return 0;
}
Я работаю над простым списком классов, но при компиляции файла заголовка и cpp я получаю сообщение об ошибке: undefined ссылка на `main '
Что я делаю неправильно, и как я могу это исправить?
Вот файл list.h, который имеет простые заголовки:
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
И вот файл list.cpp:
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];
};
Я пробовал экспериментировать с "using namespace std" и как включить, но я не могу понять, как заставить эти ошибки уйти. Что вызывает их?
Undefined ссылка на main() означает, что ваша программа не имеет функции main(), которая является обязательной для всех программ на С++. Добавьте это где-нибудь:
int main()
{
return 0;
}
Вы должны скомпилировать list.cpp
, вы не сможете связать его, если у вас нет основной программы. (Это может быть небольшое упрощение.)
Способ компиляции исходного файла без его привязки зависит от того, какой компилятор вы используете. Если вы используете g++
, команда будет следующей:
g++ -c list.cpp
Это создаст объектный файл, содержащий машинный код для вашего класса. В зависимости от вашего компилятора и ОС его можно назвать list.o
или list.obj
.
Если вы попробуете:
g++ list.cpp
предполагается, что вы определили функцию main
и попытаетесь сгенерировать исполняемый файл, в результате чего вы заметили ошибку (поскольку вы не определили функцию main
).
В какой-то момент, конечно, вам понадобится программа, которая использует ваш класс. Для этого вам понадобится другой исходный файл .cpp
, который имеет функцию #include "list.h"
и main()
. Вы можете скомпилировать этот исходный файл и связать результирующий объект вместе с объектом, сгенерированным из list.cpp
, для создания рабочего исполняемого файла. С помощью g++
вы можете сделать это за один шаг, например:
g++ list.cpp main.cpp -o main
У вас должна быть функция main
. Это не обязательно должно быть в list.cpp
. И, в зависимости от стиля и организации кода, это, вероятно, не должно быть в list.cpp
; вы можете захотеть использовать этот класс из нескольких основных программ.
Не забудьте сохранить свой код!
У меня была такая же ошибка.
В моем случае, когда я писал свой первый helloworld, я не ожидал, что в коде Visual Studio отключена функция автосохранения по умолчанию.