プロが教える店舗&オフィスのセキュリティ対策術

「erf c++」や「誤差関数 c++」など検索をかけたところ、以下のようなC言語での関数がでてきまうす。

#include <math.h>

double erf(
double x
);

これを、C++プログラムに組み込み、例えば簡単な
cout << erf(0.01) << endl;
としたところ、
「error LNK2019 :未解決の外部シンボル"~"が関数_mainで参照されました。」
というビルドエラーが出てしまい、できませんでした。
C++だと上記のプログラムではないやり方なのでしょうか?教えてください。

質問者からの補足コメント

  • うーん・・・

    ありがとうございます。以下に補足として記します。
    [プログラム全体]
    #include <iostream>
    #include <cmath>
    using namespace std;

    //誤差関数
    double erf(double b);

    int main()
    {
    cout << erf(0.01);

    return 0;
    }

    [エラーメッセージ]
    エラー 1 error LNK2019: 未解決の外部シンボル "double __cdecl erf(double)" (?erf@@YANN@Z) が関数 _main で参照されました。
    エラー 2 error LNK1120: 1 件の未解決の外部参照 (1行1列)

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/08/02 02:02
  • Visual Studio Express 2012を使っています。

    include <iostream>
    #include <math.h>
    using namespace std;

    int main()
    {
    cout << erf(0.01);
    return 0;
    }

    上記のようにプログラムを組んでもエラーが出ます。
    もしかしたら、バージョンが古く、VS2015ならできるでしょうか。
    しかし、その場合、今まで作ってきたVS2012でのプログラムはVS2015でも使用できるのか分かりません。

    No.4の回答に寄せられた補足コメントです。 補足日時:2016/08/02 18:19

A 回答 (5件)

うん, それはとても残念だ. erf が使えるのは, VS だと 2013 以降なのだよ.



https://msdn.microsoft.com/ja-jp/library/dn32904 …
は 2015 だけど, 「その他のバージョン」で 2013 も選べることから (正確には「2013 しか選べない」ことから) わかる.

で「今まで作ってきたVS2012でのプログラム」が「VS2015でも使用できるのか」は私も知らん. とりあえず「VS2012 では erf は使えない」とだけ書いておこう.
    • good
    • 0

ところであなたの使っているコンパイラは何でしょうか? バージョン込みで教えてもらえませんか?

この回答への補足あり
    • good
    • 0

なんでプロトタイプ宣言が書いてあるのでしょう?



math.h のプロトを使わないとまずいのでは?

マングリングでリンカに渡る関数名が合わなくなっているのでしょう。
    • good
    • 0

手元で実験した結果


コンパイラ (のバージョン) によるっぽい
ことが判明. 少なくとも GCC 6.1 と Visual Studio 2015 では何の問題もなく実行できる.

と思って補足にあるプログラムを見てみたら
double erf(double b);
と宣言してる時点で「ダメっぽい」雰囲気が漂ってるなぁ....
    • good
    • 0

とりあえずプログラム全体と正確なエラーメッセージをください.

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!