20

我正在处理一个简单的类列表,但是在编译头文件和 cpp 文件时,我收到错误:未定义的对 `main' 的引用

我做错了什么,我该如何解决这个问题?

这是具有简单标题的 list.h 文件:

列表.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 文件:

列表.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”以及如何包含,但我无法弄清楚如何让这些错误消失。是什么原因造成的?

4

2 回答 2

33

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

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

g++ -c list.cpp

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

如果您尝试:

g++ list.cpp

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

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 a main() function. You can compile that source file and link the resulting object together with the object generated from list.cpp to generate a working executable. With g++, you can do that in one step, for example:

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

You have to have a main function somewhere. It doesn't necessarily have to be in list.cpp. And as a matter of style and code organization, it probably shouldn't be in list.cpp; you might want to be able to use that class from more than one main program.

于 2013-01-31T07:30:39.943 回答
14

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

int main()
{
  return 0;
}
于 2013-01-31T07:29:24.487 回答