C++ 在另一个程序中使用一个程序中的变量

C++ 在另一个程序中使用一个程序中的变量,c++,class,oop,C++,Class,Oop,我正在一个文件中创建两个二维数组,比如readbundle.cpp。它们的尺寸相当大,因为经过一些繁重的数学运算后,它们实际上是从图像中创建的3D点 现在,如何使用另一个文件resecting.cpp中的值?我知道这使用了面向对象和类的概念。但是如果你能告诉我可能的语法以及如何使用它们,那将非常有帮助。请帮帮我。提前谢谢。我在谷歌上搜索过,但由于我是新手,我不知道我在看什么,也不知道去哪里看。如果你觉得这很简单,我很抱歉 C++中。< /P> 它们是两个完全不同的文件。我没有为他们制作过相同的

我正在一个文件中创建两个二维数组,比如readbundle.cpp。它们的尺寸相当大,因为经过一些繁重的数学运算后,它们实际上是从图像中创建的3D点

现在,如何使用另一个文件resecting.cpp中的值?我知道这使用了面向对象和类的概念。但是如果你能告诉我可能的语法以及如何使用它们,那将非常有帮助。请帮帮我。提前谢谢。我在谷歌上搜索过,但由于我是新手,我不知道我在看什么,也不知道去哪里看。如果你觉得这很简单,我很抱歉

<代码> C++中。< /P> 它们是两个完全不同的文件。我没有为他们制作过相同的程序或创建过任何类。这就是我想知道的。如何连接它们,以及如何在彼此之间使用值

假设X[i][j]通常是在readbundle.cpp中创建和定义的,在编译和执行它之后,我在X[i][j]中有一些值

现在我想在我单独编译的程序resecting.cpp中使用这个X[I][j]。我还没有定义任何类,或者任何oops。请帮助我如何才能做到这一点。这两个程序目前尚未连接。它们只是普通的程序。我知道我必须做一些公开的事情,并以某种方式调用变量。但我不知道该怎么做。如果我也错了,请纠正我

编辑

假设readbundle.cpp如下所示

    #include ...
    .
    . 
    vector<vector<int> >X3D;(declared global)
    .
    .
    #include ....
    .
    .
    .
    extern vector<vector<int> >X3D //will the values be reflected here?
    //the values changed in *readbundle.cpp*

    int main()
    {
          cout<<X3D[0][0]<<endl;
    }
#包括。。。
.
. 
矢量x3d;(宣布为全球)
.
.
切除.cpp如下所示

    #include ...
    .
    . 
    vector<vector<int> >X3D;(declared global)
    .
    .
    #include ....
    .
    .
    .
    extern vector<vector<int> >X3D //will the values be reflected here?
    //the values changed in *readbundle.cpp*

    int main()
    {
          cout<<X3D[0][0]<<endl;
    }
#包括。。。。
.
.
.
extern vectorX3D//这些值会反映在这里吗?
//*readbundle.cpp中的值已更改*
int main()
{

我假设您提到的两个文件都是源文件,您希望将它们分别编译并作为同一程序的一部分运行


查看
链接器的工作方式,并查看
静态变量。

您可以这样做:

extern char MyArray[];
extern unsigned int MyArraySize;
在arrayfile中,您可以按照数组的外观来声明数组,即

char MyArray[] = { 123, 20, -4, ...};
unsigned int MyArraySize = sizeof(MyArray);
在源文件中,您可以这样引用它:

extern char MyArray[];
extern unsigned int MyArraySize;
如果你事先知道尺寸,你可以这样做

char MyArray[10] = ...;

更新

下面是一个示例代码,让您开始学习。 按照指示创建文件。如果更改名称,请不要忘记更改include指令。;)

ArrayFile.h:

#ifndef ARRAYFILE_H_
#define ARRAYFILE_H_

#define ARRAY_ROWS      5
#define ARRAY_COLUMNS   3


#endif /* ARRAYFILE_H_ */
ArrayFile.cpp:

#include "ArrayFile.h"

char BundleArray[ARRAY_ROWS][ARRAY_COLUMNS] =
{
    { 1, 2, 3 },
    { 2, 4, 5 },
    { 3, 6, 7 },
    { 4, 8, 9 },
    { 5, 0, 6 },
};
ArraySample.cpp

#include <iostream>

#include "ArrayFile.h"

extern char BundleArray[ARRAY_ROWS][ARRAY_COLUMNS];

int main()
{
    unsigned int rows = ARRAY_ROWS;
    unsigned int columns = ARRAY_COLUMNS;

    for(unsigned int x = 0; x < rows; x++)
    {
        std::cout << "Row:" << x << std::endl;
        for(unsigned int y = 0; y < columns; y++)
        {
            std::cout << "Value [" << x << "/" << y << "] = " << (char)((BundleArray[x][y])+0x30) << std::endl;
        }
    }
    return 0;
}
#包括
#包括“ArrayFile.h”
extern char BundleArray[数组\行][数组\列];
int main()
{
无符号整数行=数组\行;
无符号整数列=数组\列;
for(无符号整数x=0;xstd::是不同的进程,还是同一个程序中的不同源文件?如果是第一个,那么请阅读,如果是第二个,你应该了解外部。它们是两个不同的文件。我不知道如何使它们也成为同一个程序@JoachimPileborg。我在同一个文件夹中有这两个文件。我希望这里很清楚,请帮助我。什么您正在使用的IDE?可能与我在使用linux terminal@DmitrySazonov和g++编译器时使用的相同,您是对的。它们是完全不同的文件,我计划单独编译。目前,我还没有创建类,也不太确定如何更好地使用它们。我将研究它们,谢谢。但我无法使用cli查看您提供的链接。@LakshmiNarayanan-它们不是链接,而是我建议您输入谷歌的术语。
linker
是一个程序,它将编译器的不同运行生成的文件合并到一个程序中,
静态
变量是在不同编译单元之间传递信息的一种方式。另外请注意,这不是一个非常面向对象的机制,但您必须从某个地方开始:-)祝您好运!文件readbundle.cpp和resectioning.cpp都在同一个文件夹中。数组是在readbundle.cpp中声明的,在readbundle.cpp中定义的。我应该在resectioning.cpp中使用extern命令吗?它会直接使用readbundle中的数组而不使用其他li吗nk?请澄清。抱歉再次询问。编译器不关心目录,只关心模块(即对象文件)。如果您谈论的是文件,则必须将其读入内存,然后从任意位置使用它们,但您谈论的是源文件。extern命令告诉编译器,它将在其他位置找到数据,这样您就不会出错。链接器在链接阶段会注意填充正确的地址。请原谅,但我不知道倒立。我也没有创建任何对象。我已经编译了readbundle文件。你能带我离开这里吗?我也没有链接这两个代码。因此,我有点困惑,编译器如何在系统中查找这个变量,而我没有指定任何链接或它必须查找的文件。我为不理解cle而道歉arly。我创建了一个简短的示例来演示您必须执行的操作。您可以按原样使用自己的数据填充它,并在主函数中写入您需要的任何处理。@LakshmiNarayanan我认为您将Devlus提到的术语“对象文件”与OOP编程概念相混淆。对象文件(通常以.o或.obj结尾的文件)不是指对象或类,而是指编译后的源文件。然后,“链接器”将对象文件合并成单个可执行文件。链接器同时查看所有对象,并从一个“对象”(非程序)中找出哪些变量在另一个对象中引用,以便将其编译后的代码融合到可执行文件中。