题
您好,我在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.cpp
和animal.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);