小编Rau*_*nar的帖子

在头文件中声明类对象

大家问候.

我似乎在寻找一个基金但我无法在任何地方找到解决方案.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初始化几个公共值.任何智慧的话?

c++ linker header object

6
推荐指数
3
解决办法
3万
查看次数

使用C从C++访问公共类内存

问候每个人.

我目前正在UNIX上编写C,C++和fortran的多语言程序,不幸的是,当我在编译后尝试执行时遇到"分段错误".

我已经将问题缩小到我程序的C++和C部分之间的接口.第一部分包括main.ccp和SA.cpp,以及第二部分CFE.c.

名为'SimAnneal'的类在SA.cpp中存在,具有公共向量DensityArray和ElementArray.该计划的顺序如下:

  1. 创建SimAnneal对象'Obj1'并调用函数ObjFunction()

  2. 该函数初始化矢量大小

  3. 使用指向两个向量及其长度的指针调用CFE(...).

  4. CFE.c通过使用指针直接编辑向量的数据元素

  5. 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)

c c++ memory class

1
推荐指数
1
解决办法
404
查看次数

标签 统计

c++ ×2

c ×1

class ×1

header ×1

linker ×1

memory ×1

object ×1