C++错误: main未定义的引用

25

我正在开发一个简单的List类,但在编译头文件和cpp文件时,出现错误:undefined reference to `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" 和如何包含头文件进行了实验,但是我无法弄清楚如何让这些错误消失。是什么导致了这些错误?


1
主函数在哪里? - chris
9
你需要一个 int main() 函数。 - Yuushi
2
除非你的程序不是可执行文件,否则“main”函数是必须的。你必须创建“main”函数来构建应用程序。 - sgarizvi
非常感谢!我完全忘记了,知道我漏掉了什么。 - smileham
2个回答

37

除非您有一个主程序,否则您应该能够编译list.cpp,但是无法将其进行链接。 (这可能有点过于简化。)

编译源文件而不链接它的方式取决于您使用的编译器。如果您使用的是g++,则命令将是:

g++ -c list.cpp

这将生成一个包含你的类机器码的对象文件。根据你的编译器和操作系统,它可能被称为list.olist.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 中;您可能希望能够从多个主程序中使用该类。


15

"Undefined reference to main()"的意思是您的程序缺少一个主函数(main()函数),而该函数在所有C++程序中都是必需的。请在代码中添加以下内容:

int main()
{
  return 0;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接