2

readbundle.cpp など、1 つのファイルに 2 つの 2D 配列を作成しています。それらは、いくつかの重い数学の後、実際には画像から作成された 3D ポイントであるため、非常に巨大です。

さて、ここの値を別のファイル resectioning.cpp でどのように使用できますか? これはおっととクラスの概念を使用していることを知っています。しかし、可能性のある構文とその使用方法を簡単に説明できれば、非常に役立ちます。ここで私を助けてください。前もって感謝します。私はグーグルで検索しましたが、これは初めてなので、何を見ているのか、どこを見ればよいのかわかりません。これが非常に初歩的であると感じた場合は、お詫び申し上げます。

コードは c++ です。

それらは完全に2つの異なるファイルです。私はそれらを同じプログラムにしたり、クラスを作成したりしていません。これが私が知りたいことです。それらを接続する方法、および値を別の値で使用する方法。

X[i][j] が通常どおり readbundle.cpp で作成および定義されており、それをコンパイルおよび実行した後、X[i][j] に特定の値があるとします。

今度は、この X[i][j] をプログラム resectioning.cpp で使用したいと思います。このプログラムは、個別にコンパイルしています。クラスもおっとも定義していません。どうすればこれを達成できるか教えてください。これら 2 つのプログラムは現在接続されていません。それらは単なる通常のプログラムです。何か公開して、何らかの方法で変数を呼び出さなければならないことはわかっています。しかし、私はそれを行う正しい方法を知りません。間違っている場合も修正してください。

編集

readbundle.cppが次のようになっているとします

    #include ...
    .
    . 
    vector<vector<int> >X3D;(declared global)
    .
    .

resect.cppは次のとおりです。

    #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 correct の概念を理解できたと思います。間違っている場合は助けてください。

: 前のファイルから同じ X3D 値を取得できますか? この場合、エラーが発生します。探している機能をどのように実現できますか?

4

2 に答える 2

3

これは次のように行うことができます。

あなたのarrayfileでは、配列を宣言しますが、それは次のようになります。

char MyArray[] = { 123, 20, -4, ...};
unsigned int MyArraySize = sizeof(MyArray);

ソースファイルでは、次のように参照できます。

extern char MyArray[];
extern unsigned int MyArraySize;

事前にサイズが分かっていれば大丈夫

char MyArray[10] = ...;

extern char MyArray[10];

アップデート

開始するためのサンプル コードを次に示します。指示に従ってファイルを作成します。名前を変更する場合は、include ディレクティブも忘れずに変更してください。;)

ArrayFile.h:

#ifndef ARRAYFILE_H_
#define ARRAYFILE_H_

#define ARRAY_ROWS      5
#define ARRAY_COLUMNS   3


#endif /* ARRAYFILE_H_ */

配列ファイル.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;
}

これらのファイルを作成したら、コンパイルします。

于 2013-06-06T12:52:54.207 に答える
2

あなたが言及した2つのファイルは両方ともソースファイルであり、それらを別々にコンパイルして同じプログラムの一部として実行したいと思います。

あなたのlinker仕組みを調べて、static変数を見てください。

于 2013-06-06T12:39:46.440 に答える