誰かが書いたオープンソースのC++ライブラリのソースファイルをビルドしようとしています。これはWindows上でCygwin's mingw-w64 compilerで行われています。ライブラリはいくつかのC++ 11の機能に依存しているので、私が付けている唯一のコンパイラオプションは-std=gnu++11
です。ここでstd :: qualifierで奇妙なコンパイラエラーを修正する
は、問題を引き起こしているように見える彼らのライブラリのコードのいくつかの例は以下のとおりです。
CPScalar & Abs()
{
m_dValue = std::abs(m_dValue);
return *this;
}
//...
template<typename Unit>
bool SEScalarQuantity<Unit>::Set(const SEScalarQuantity<Unit>& s)
{
if (m_readOnly)
throw CommonDataModelException("Scalar is marked read-only");
if (!s.IsValid())
return false;
m_value = s.m_value;
m_isnan = (std::isnan(m_value)) ? true : false;
m_isinf = (std::isinf(m_value)) ? true : false;
m_unit = s.m_unit;
return true;
}
私は上記std::
資格の機能上のコンパイルエラーを取得します。 m_dValue = std::abs(m_dValue);
ライン上でコンパイルエラーが、私はそれが同様のSOの質問にquestion of whether std::abs(0u) is ill-formedなどthis answerに関連している可能性が考えさせられました
error: call of overloaded 'abs(double&)' is ambiguous
です。
m_isnan = (std::isnan(m_value)) ? true : false;
と次の行は、コンパイラが文句はありませんstd::
の無数の他の用途がありますが、私に
error: expected unqualified-id before '(' token
を与えます。私にエラーを出すステートメントのstd::
修飾子をすべて削除すると、コードは美しくコンパイルされます。
これは、このopen source projectは変更されないで他人によって(おそらく)建設されているので、私はここで何が分からないのですか?
グローバルスコープに 'using namespace std;'がある場合は、それを削除してエラーをすべて解決するか、ライブラリを削除して他のものを削除してください。もっと読む:http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – NathanOliver
@NathanOliver - 'namespace std;を使用している間、良いアドバイスですが、この問題を解決してください –
コードに ''は含まれていないと推測されます。これは 'std ::'バージョンを使用するための*正式な要件です。とにかくいくつかのコンパイラで見えるかもしれません。 –