2016-03-26 28 views
0

私のmain.cppファイルにinitializeObjects()というメソッドがあり、それをScene.cppという名前の別のソースファイルのメソッドから呼び出す必要があります。それ、どうやったら出来るの? これは、ヘッダーのない私のmain.cppにファイル、次のとおりです。他のソースファイルからmain.cppの静的関数を呼び出す方法は?

static void initializeObjects(); 
int main() { 
    Scene myScene; 
    myScene.render(640,480); 
    return 0; 
} 

void initializeObjects(){ 
    //Add a plane of gray color 
    Scene::shapes.push_back(std::make_shared<Plane>(Vector3D(0,1,1), Vector3D(0,0,80), COLOR_GRAY)); 
    //Add two spheres 
    Scene::shapes.push_back(std::make_shared<Sphere>(100.0, Vector3D(0,50,0), COLOR_WHITE)); 
    Scene::shapes.push_back(std::make_shared<Sphere>(60.0,ORIGIN, COLOR_RED)); 
} 
+3

関数 'static'にマークを付けると、他のソースファイルからアクセスできないように明示的にコンパイラに指示します。だからアクセス可能にしたい場合は 'static'を落としてください。 –

答えて

1

ストレージ・クラス指定staticで関数を定義するときは、明示的にこの関数は内部リンケージを持つようにしたいと言う - これはそれを意味し、定義されている翻訳単位の外側には表示しないでください。

他の翻訳単位(Scene.cpp)から関数を呼び出せるようにするには、static指定子を削除し、この他の(Scene.cpp)変換に含める必要がある関数の宣言をヘッダーファイルに追加します単位。

+0

別のヘッダーファイルに宣言を追加しました。他のexternキーワードを使用する必要がありますか? ** initializeObjects()**のスコープは今何ですか? –

+0

externを必要とせず、initializeObjectsは外部リンケージを持ちます。 – marcinj

関連する問題