2017-02-18 5 views
0

まあ、私はPythonからC++への初心者で、ヘッダファイルに変数を宣言するのに慣れていません。私はいくつかの同じ定数値を設定していくつかの値を計算するいくつかの.cppファイルを作成しようとしています。以下のように私のコードの何か:私はここに捕まってしまったC++ヘッダの値を宣言する

/Global_input.h/ 
extern int y = 1; 
extern int x = 2; 

/Properties_1.cpp/ 
//I wanna calculate z = x + y 
include<Global_input.h> 
int z; 

/Properties_2.cpp/ 
//I wanna calculate g = x*y 
include<Global_input.h> 
int g; 

は、私が検索する方法は、新しいクラスまたは別の.cppファイルを作成することです。このような単純なケースのためにx、yを直接呼び出すことはできますか?この目的のために事前に感謝

答えて

1

使用静的定数変数:

static const int x = 1; 

ここconstキーワードは、あなたのコードは、(あなたは、その値が一定になるようになっていると述べた)任意の時点でのxを変更しないことが保証されます。

//Put before anything else 
#ifndef MY_H 
#define MY_H 

//code goes here 

//at the end of your code 
#endif 

あなたmy.cpp:あなたのmy.hファイルは、この形式を持っている必要があり

Variable declarations in header files - static or not?

0

:私はstaticキーワードの目的が何であるかのアイデアを得るために、スレッドSO以下読むことをお勧めまたGlobal_input.cppファイルを作成Global_input.hの作成に加えて

//include header file you wish to use 
#include "my.h" 
+0

を使用するか、「#pragma once」を使用して、タイプミスなどのことを心配しないでください。 – xaxxon

1

:ファイルは次のようになります。

/Global_input.h/ 
extern int y; 
extern int x; 

/Global_input.cpp/ 
#include "Global_input.h" 

int y = 1; 
int x = 2; 

extern変数が定義されていないことを宣言するだけです。他の場所に定義する必要があります。

+0

'extern int y = 1;'はイニシャライザを持っているので 'y'を定義します。 –

+0

私はそれが標準的な動作(または少なくとも良い習慣)ではないと思います。 Cozの 'clang'と' gcc'はヘッダが単一の翻訳単位に含まれているときに警告を出します。ヘッダが複数の翻訳単位(ここにある)に含まれていれば、 'x'と' y'の複数の参照について文句を言います。 – army007

+0

** **は標準動作です。コンパイラがヘッダを複数の翻訳単位に含めるときに、複数の定義について不平を言うのは、各翻訳単位が定義を取得するからです。 –

0

ヘッダーを一度読み込むようにコンパイラに指示する必要があります。

/* Global_input.h */ 
#ifndef GLOBAL_INPUT_H 
#define GLOBAL_INPUT_H 
    static const int y = 1; 
    static const int x = 2; 
#endif 

/* Properties_1.cpp */ 
//I wanna calculate z = x + y 
#include<Global_input.h> 
int z = x + y; 

/* Properties_2.cpp */ 
//I wanna calculate g = x*y 
#include<Global_input.h> 
int g = x * y;