8

チャレンジ:

コンパイルに失敗するこのコードがあります。何が悪いのか分かりますか?それは私に一度頭痛を引き起こしました。

// header
namespace values {
  extern std::string address;
  extern int port;
}

// .cpp file
std::string  ::values::address = "192.0.0.1";
int          ::values::port    = 12;

一見正しいように見えます。エラーの数とエラーは!?

4

2 に答える 2

8

1 つのエラー:

std::string values::address = "192.0.0.1"; 

が適切な形式です。それ以外の場合、解析は次のようになります。

std::string::values::address = "192.0.0.1"; 

「string」内にメンバー「address」を持つメンバー「values」はありません...

メンバーを含めることができないため、組み込み型に対して機能します.. int::values は明確な解析、int ::values です。

std::string (::values::address) = "192.0.0.1"; 

も動作します。typedef int sometype; の場合は注意してください。上記の文字列と同じように sometype を使用すると同じ問題が発生しますが、「int」では発生しません。

于 2010-03-01T19:44:06.753 に答える
3

私はゲームに遅れていますが、.cpp ファイルを次のように記述することをお勧めします。

// .cpp file
namespace values {
  std::string  address = "192.0.0.1";
  int          port    = 12;
}

もちろん、それはあなたがfriend宣言で抱えていた問題を解決しません。

于 2010-03-01T21:24:56.370 に答える