Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;在单独的.cpp文件和makefile链接中在类外定义的函数_C++_Class_Function_Header_Makefile - Fatal编程技术网

C++ c++;在单独的.cpp文件和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()”的未定义引用 我知道我在类定义之外声明函数时犯了一些错误,包括

我有一个使用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中的链接。以下是一些文件的精简版本:

生成文件:

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 $<