大家问候.
我似乎在寻找一个基金但我无法在任何地方找到解决方案.Anywho,将继续解释.
我有一个由三个文件组成的程序; main.ccp,add.h,add.cpp.
我在add.h中声明了类'SA',并在add.cpp中定义了所有函数
additional.h
class SA {
...
public
int x;
} Obj1, Obj2;
Run Code Online (Sandbox Code Playgroud)
main.ccp
#include "additional.h"
int main() {
Obj1.x = 5;
...
}
Run Code Online (Sandbox Code Playgroud)
这给我一个关于编译的链接错误:错误LNK2005:已经在main.obj中定义的"class SA Obj1"(?Obj1 @@ 3VSA @@ A)
对象的唯一定义发生在add.h中,而没有其他地方.如果声明main中的对象而不是标题,程序编译得很好:
main.ccp
#include "additional.h"
int main() {
SA Obj1;
Obj1.x = 5;
...
}
Run Code Online (Sandbox Code Playgroud)
问题是我想在add.cpp中初步使用这些对象,但仍需要通过main.cpp初始化几个公共值.任何智慧的话?
问候每个人.
我目前正在UNIX上编写C,C++和fortran的多语言程序,不幸的是,当我在编译后尝试执行时遇到"分段错误".
我已经将问题缩小到我程序的C++和C部分之间的接口.第一部分包括main.ccp和SA.cpp,以及第二部分CFE.c.
名为'SimAnneal'的类在SA.cpp中存在,具有公共向量DensityArray和ElementArray.该计划的顺序如下:
创建SimAnneal对象'Obj1'并调用函数ObjFunction()
该函数初始化矢量大小
使用指向两个向量及其长度的指针调用CFE(...).
CFE.c通过使用指针直接编辑向量的数据元素
ObjFunction()使用EnergyArray(和可能的DensityArray)数据.
所有来源的相关脚本如下:
main.cpp中
#include "SA.h"
int main()
{
SimAnneal Obj1;
Obj1.ObjFunction();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
SA.h
class SimAnneal
{
void Initialize ();
...
public
std::vector<float> DensityArray;
std::vector<float> EnergyArray;
double ObjFunction ();
...
}
Run Code Online (Sandbox Code Playgroud)
SA.cpp
#include "CFE.h"
void SimAnneal::Initialize ()
{
int length = 15;
EnergyArray.resize(length);
DensityArray.resize(length);
}
double SimAnneal::ObjFunction ()
{
Initialize ();
CFE(&DensityArray[0], &EnergyArray[0], DensityArray.size());
// sends pointers of both arrays to CFE.c, which will then
// directly modify the array
double …Run Code Online (Sandbox Code Playgroud)