C++ c++;在单独的.cpp文件和makefile链接中在类外定义的函数
我有一个使用Crandommersene类函数的项目,在header randomc.h中声明;这些函数在不同的文件mersenne.cpp中定义。在我的makefile中有一个对象*MC_funcs2.o*,它使用类中的函数。源*MC_funcs2.cpp*包含头randomc.h。然而,编译器抱怨: MC_funcs2.o:MC_funcs2.cpp:(.text+0x20):对“Crandommersene::Random()”的未定义引用 我知道我在类定义之外声明函数时犯了一些错误,包括使用前面提到的函数的头文件,以及makefile中的链接。以下是一些文件的精简版本: 生成文件:C++ c++;在单独的.cpp文件和makefile链接中在类外定义的函数,c++,class,function,header,makefile,C++,Class,Function,Header,Makefile,我有一个使用Crandommersene类函数的项目,在header randomc.h中声明;这些函数在不同的文件mersenne.cpp中定义。在我的makefile中有一个对象*MC_funcs2.o*,它使用类中的函数。源*MC_funcs2.cpp*包含头randomc.h。然而,编译器抱怨: MC_funcs2.o:MC_funcs2.cpp:(.text+0x20):对“Crandommersene::Random()”的未定义引用 我知道我在类定义之外声明函数时犯了一些错误,包括
SpMC3: SpMC3.cpp SpMC.h mersenne.o MC_funcs2.o
g++ SpMC3.cpp MC_funcs2.o mersenne.o -o SpMC3
MC_funcs2.o: MC_funcs2.cpp SpMC.h randomc.h
g++ -c MC_funcs2.cpp mersenne.cpp
mersenne.o: mersenne.cpp randomc.h userintf.cpp
g++ -c mersenne.cpp userintf.cpp
SpMC3.cpp(主程序):
#包括“SpMC.h”
int main(){
cout我强烈建议将每个源文件*.c
编译成一个目标文件*.o
,即mersenne.cpp->mersenne.o
。这可以在不必手动指定每个目标文件的情况下实现
CC = gcc
CFLAGS = -g -O2
OBJECTS = main.o foo.o
main : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o main
%.o : %.c
$(CC) $(CFLAGS) -c $<
CC=gcc
CFLAGS=-g-O2
OBJECTS=main.o foo.o
main:$(对象)
$(CC)$(CFLAGS)$(对象)-o主
%.o:%.c
$(CC)$(CFLAGS)-c$<
有关makefiles的更多信息,请查看或回答。此错误仅意味着mersenne.cpp未被编译…请确保它已被编译并链接…oops我发现了错误,在makefile中,mcfuns2.o的第一行也应该有mersenne.cpp。如何删除此问题?
#include "SpMC.h"
#include "randomc.h"
CRandomMersenne RanGen(time(0));
void outrandom() {
ofstream out;
out << RanGen.Random() << endl;
return;
}
CC = gcc
CFLAGS = -g -O2
OBJECTS = main.o foo.o
main : $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o main
%.o : %.c
$(CC) $(CFLAGS) -c $<