2016-10-13 4 views
-3

私のプロジェクトには、Configurationという名前のクラスが2つあります。 1つは名前空間共通です。それがグローバルスコープでグローバルscope.Theクラスでありますので、他には、名前空間を持っていないこのようなものです: Configuration.h:C++でグローバルスコープに属する静的メンバーを初期化する方法

class Configuration 
{ 
    public: 
     static int a; 
     static string b; 
     void func(); 
} 

Configuration.cpp:

#include "Configuration.h" 
int ::Configuration a; //ok 
std::string ::Configuration b;//error,the complier treat it like this "std::string::Configuration" 

コンパイラからのメッセージが似ていますこの: configuration.cpp:17:ERROR: 'のstd ::文字列::設定を' 解決方法

を宣言されていません。コンプライアーが "std :: string :: Configuration"を "std :: string :: Configuration"として扱うのはなぜですか?

+0

'Class'が間違っている:あなたが本当にしたい場合は

int Configuration::a; std::string Configuration::b; 

は、あなたが何らかの形で間接のいずれかの余分なレベルを作成する必要があります。ここに偽のコードを投稿しないでください。また、エラーメッセージを絵としてではなく、逐語テキストとして投稿してください。あなたの問題を再現する[MCVE]を提供してください。 –

+0

私が質問に書いているように、名前空間共通の別のクラスConfigurationがあり、私もそれを使う必要があります。私がこのように書く場合、 'int Configuration :: a; std :: string Configuration :: b'、このようなコンパイラのプロンプト: 'Configuration'への参照はあいまいです – Lianshuai

+0

それでも 'Class'は間違っています。 –

答えて

0

ここで明示的にグローバルスコープを使用する必要はありません。::を省略することができます。

typedef ::Configuration conf; 
std::string conf::b; 
+0

ありがとう、それはこの問題を解決します。しかし、コンパイラがエラーを表示する理由:*** 'std :: string :: Configuration'は宣言されていません*** – Lianshuai

+0

@Lianshuaiコンパイラは宣言を 'std :: string :: Configuration'とみなすためです。 –

関連する問題