您好,我在C写一个小项目++,我想有一些类,做了一些工作,我写的接口和类的实现。

这让我惊讶的事情是,我不能有一个简单的类没有一个main(),我想有,一旦实例化的类,它的方法可以被调用,做的事情,但我不需要(也不想)一个main()在类实现。 这里有一个例子,我有我的想什么,我有头:

文件animal.h:

class animal
{
 public: 
   animal();
  ~animal();

 public:
   int method1(int arg1);

 private:
   int var1;
};

文件animal.cpp:

#include "animal.h"

animal::animal(){...}
animal::~animal(){...}
int animal::method1(int arg1){return var1;}
}

和我想打电话给动物类形成另一个文件,它的工作,是这样的: 文件app.cpp:

#include <neededlib>
#include "animal.h"

int main()
{
 animal dog;
 cout << dog.method1(42);
 return 0;
}

但是编译器给我

/usr/lib/gcc/i686-pc-linux-gnu/4.3.3/../../../crt1.o: In function _start:

"(.text+0x18): undefined reference to `main`"

collect2: ld returned 1 exit status 

有关animal.cpp,但我并不需要一个有主,或者我需要它?

我在哪里错了?

有帮助吗?

解决方案

  

但我不需要(也不需要)一个main()的类实现。

在功能main是你的入口点。这就是开始执行。你需要有一个且只有一个这样的功能。

  

但是编译器给我“未定义参考主”为animal.cpp,但我并不需要一个主那里,或者我需要它?

现在,你的问题看起来你有没有的链接app.cppanimal.cpp的编制形式。

  

我没有生成文件那么强,我使用的类似克++ animal.h -o动物和g ++ animal.cpp但它给我上述

的错误

您不编译头。因此,不要使用:g++ animal.h

在单独编译的animal.cpp,克++创建一个目标文件。您还需要编译app.cpp因为你的确实需要的的main。一旦你编译app.cpp文件,你必须把它与先前创建的animal对象文件链接。但是,如果这些没有得到挂在,特别是,包含main功能,你会打你现在所得到的是错误的文件。

然而,g++需要的我所如上所述护理。尝试是这样的:

g++ animal.cpp app.cpp -o test

这将创建一个可执行文件,称为test,您可以使用运行应用程序:

./test

其他提示

首先,这是错误的:animal dog = new animal();

您要么需要

animal * dog = new animal();
cout << dog->method1(42);
delete animal;

或优选刚好

animal dog;

其次,你需要通过编译你的两个源.cpp文件生成的对象文件链接在一起。

gcc -o animal animal.cpp app.cpp 

应该做的伎俩,如果你正在使用gcc。

您应该或者编译它们一起(在单个g++命令)或编译它们两者为对象文件(g++ -c),然后使用ld链接的目标文件一起。

样品生成文件:

all: app.exe

app.exe: app.o animal.o
    g++ -o app.exe app.o animal.o

app.o: app.cpp
    g++ -c -o app.o app.cpp

animal.o: animal.cpp animal.h
    g++ -c -o animal.o animal.cpp
class animal
{
 public: 
   animal();
  ~animal();

 public:
   method1(int arg1);

 private:
   int var1;
};

注意你没有把分号类声明的末尾。 C ++需要它有时给出混乱/误导错误消息如果忘记它。

 public:
   method1(int arg1);

您缺少的方法1返回类型。你的意思是这样

   int method1(int arg1);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top