我有这个ProcessStasts.h文件,它包含在另外两个.h文件中.
#pragma once
#include <mpi.h>
#include <cstddef>
struct ProcessStats
{
int rank,
itLeft,
crtIt,
processFlag;
float speed;
};
MPI_Datatype MPI_Cust_ProcessStats_create()
{
// set data to create new MPI data type
MPI_Datatype MPI_Cust_ProcessStats;
MPI_Datatype dataTypes[5] = {MPI_INT, MPI_INT, MPI_INT, MPI_INT, MPI_FLOAT};
int blockLengths[5] = {1, 1, 1, 1, 1};
MPI_Aint offsets[5];
offsets[0] = (MPI_Aint) offsetof(ProcessStats, rank);
offsets[1] = (MPI_Aint) offsetof(ProcessStats, itLeft);
offsets[2] = (MPI_Aint) offsetof(ProcessStats, crtIt);
offsets[3] = (MPI_Aint) offsetof(ProcessStats, processFlag);
offsets[4] = (MPI_Aint) offsetof(ProcessStats, speed);
// create new MPI type based on data from above
MPI_Type_create_struct(5, blockLengths, offsets, dataTypes, &MPI_Cust_ProcessStats);
MPI_Type_commit(&MPI_Cust_ProcessStats);
return MPI_Cust_ProcessStats;
}
当我尝试编译时,我收到此错误:错误LNK2005:已定义MPI_Cust_ProcessStats_create(void).如果我对#include“ProcessStasts.h”指令和使用ProcessStats结构的行进行注释,则从其中一个文件中正确编译.我甚至试图评论依赖于ProcessStats的所有行,只留下#include“ProcessStasts.h”语句,我得到这个lnk错误.怎么了?
解决方法:
你可以像这样写:
首先是ProcessStasts.h
#pragma once
#include <mpi.h>
#include <cstddef>
struct ProcessStats
{
int rank,
itLeft,
crtIt,
processFlag;
float speed;
};
MPI_Datatype MPI_Cust_ProcessStats_create();
然后是ProcessStasts.c
#include "ProcessStats.h"
MPI_Datatype MPI_Cust_ProcessStats_create()
{
// set data to create new MPI data type
MPI_Datatype MPI_Cust_ProcessStats;
MPI_Datatype dataTypes[6] = {MPI_INT, MPI_INT, MPI_INT, MPI_INT, MPI_FLOAT};
int blockLengths[5] = {1, 1, 1, 1, 1};
MPI_Aint offsets[5];
offsets[0] = (MPI_Aint) offsetof(ProcessStats, rank);
offsets[1] = (MPI_Aint) offsetof(ProcessStats, itLeft);
offsets[2] = (MPI_Aint) offsetof(ProcessStats, crtIt);
offsets[3] = (MPI_Aint) offsetof(ProcessStats, processFlag);
offsets[4] = (MPI_Aint) offsetof(ProcessStats, speed);
// create new MPI type based on data from above
MPI_Type_create_struct(3, blockLengths, offsets, dataTypes, &MPI_Cust_ProcessStats);
MPI_Type_commit(&MPI_Cust_ProcessStats);
return MPI_Cust_ProcessStats;
}
然后,您可以根据需要多次包含ProcessStasts.h.作为建议,不要在头文件中定义函数.