【发布时间】:2013-12-07 03:06:29
【问题描述】:
我有这个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;
}
当我尝试编译时出现此错误:error LNK2005: MPI_Cust_ProcessStats_create(void) already defined。如果我从其中一个文件中注释 #include "ProcessStasts.h" 指令和使用 ProcessStats 结构的行,它会正确编译。我什至尝试评论依赖于 ProcessStats 的所有行,只留下 #include "ProcessStasts.h" 语句,我得到这个 lnk 错误。怎么了?
【问题讨论】:
-
当
struct中有5个字段时,为什么MPI结构数据类型构造函数3的第一个参数是? -
因为一个错误,用更多的变量改变了结构......与DataType数组[6]相同。谢谢,这让我看到了我以后会发现的错误。