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

Posted

技术标签:

【中文标题】C++ 错误:未定义对“main”的引用【英文标题】:C++ Error: undefined reference to `main' 【发布时间】:2013-01-31 07:18:23 【问题描述】:

我正在处理一个简单的类列表,但是在编译头文件和 cpp 文件时,我收到错误:未定义对 `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];
;

我尝试尝试使用“使用命名空间 std”以及如何包含,但我不知道如何消除这些错误。是什么原因造成的?

【问题讨论】:

主要功能在哪里? 你需要一个int main() 函数。 除非您的程序不是可执行文件,否则main 函数是必需的。您必须创建 main 函数来构建应用程序。 非常感谢!我完全忘记了,我知道我错过了一些东西。 【参考方案1】:

你应该能够编译 list.cpp,除非你有一个主程序,否则你不能链接它。 (这可能有点过于简单化了。)

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

g++ -c list.cpp

这将生成一个包含类机器代码的目标文件。根据您的编译器和操作系统,它可能被称为list.olist.obj

如果你改为尝试:

g++ list.cpp

它会假设你已经定义了一个main 函数并尝试生成一个可执行文件,导致你看到的错误(因为你还没有定义了一个main 函数)。

当然,在某些时候,您需要一个使用您的类的程序。为此,您需要另一个具有#include "list.h"main() 函数的.cpp 源文件。您可以编译该源文件并将生成的对象与从list.cpp 生成的对象链接在一起以生成工作可执行文件。使用g++,您可以一步完成,例如:

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

你必须在某个地方有一个main 函数。它不一定必须在list.cpp 中。而且作为风格和代码组织的问题,它可能不应该在list.cpp;您可能希望能够从多个主程序中使用该类。

【讨论】:

【参考方案2】:

对 main() 的未定义引用意味着您的程序缺少 main() 函数,这是所有 C++ 程序所必需的。在某处添加:

int main()

  return 0;

【讨论】:

以上是关于C++ 错误:未定义对“main”的引用的主要内容,如果未能解决你的问题,请参考以下文章

C++ 错误,未定义的引用类

Linux C++ 对 main 进行未定义的引用

当 main 存在时,未定义对 `main' 的引用

对函数错误的未定义引用,同时使用 C 和 C++

对 `JNI_CreateJavaVM' linux 的未定义引用

我的编译器对main的未定义引用错误