1

コンパイルされない次のレガシー C++ コードがあります。

#include <stdio.h>
#include <iostream>

extern ostream *debug;

GCC (g++) が不平を言う:「'*' トークンの前に初期化子が必要です」

周りを見回すと、次のようにこれらを外部参照として宣言するのがより一般的です。

extern ostream& debug;

ポインターが有効ではないのに、参照がこの状況にあるのはなぜですか?

解決:

後述するように、本当の問題は std:: 名前空間指定子が欠落していることです。どうやら、これは古い C++ コードでは一般的でした。

4

1 に答える 1

7

はい、extern を使用してポインターを宣言できます。あなたのエラーは、次を使用して修飾するのを忘れた可能性が最も高いですstd:::

// note the header is cstdio in C++. stdio.h is deprecated
#include <cstdio>
#include <iostream>

extern std::ostream *debug;
于 2008-12-14T03:35:42.513 に答える