私はインターネット上でconst
+ extern
をgoogledしましたが、実際には私の質問には良い答えはないようです。externとconstの組み合わせを持つ変数についての質問
const
は、内部リンケージを意味しますが、コンパイル単位の間でconst変数を共有したい場合にのみ使用します。 extern
が最適ですか?
一般的な解決策は、次のようになります。
//g.h
extern const int MAX;
// g.c
extern const int MAX = 3;
しかし、この解決策は以下のように、欠点を持っている: "エラーC2057:予想定数式"
// Say, I want to use this MAX in the same header file.
// g.h
extern const int MAX;
class AClass
{
public:
AClass(): i(MAX){}
private:
int i;
};
コンパイラは次のように文句を言うでしょう。
解決方法はありますか?
// g.h
enum { MAX = 3; }
// g.c
#include "g.h"
static char buf[MAX];
あなたはMAX
のアドレスを取得することはできませんが、今度はあなたがゼロではこれを取得:
IIRC VSはあなたがヘッダー内の 'のexternのconst int型の最大値= 3'そして'のconst int型の最大値を行うことができます; 'ソースで。これは、少なくとも静的メンバー変数に対して機能します。あなたがそこに定義しているので、ソースファイル内のexternキーワードを削除してみてください。 – RedX
これは複数の定義を引き起こしませんか? –
@DaiHaoci:どうして最初に外部リンケージが必要なのですか?あなたはそれにどのような利点があると思いますか? – ildjarn