• ベストアンサー

複素数complex.hがおかしいのでしょうか?

C言語初心者です。 根本的に間違えているかと思いますが、下記内容で困ってます。 C++で複素数を扱いたいと思い #include<complex.h> うんだら ふんだら と書きました。 環境は、Borland C++ 5.6 for Win32だと思います。 メモ帳でソースを作って、コマンドプロンプトでbcc32 ***.c とコンパイルしたのですが、ヘッダーファイルのエラー?が 出てるようです。(詳細は下記に示してます。) おそらく根本的なエラーが出てるとはおもうのですが、 エラーの内容が理解できません。ヘッダーファイルがどこにあるのかも わかりません。どうすればエラーがなくなるのか教えて頂きたいです。 よろしく御願い致します。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ エラー E2257 C:\Program Files\Borland\CBuilder6\Include\stl/_mbstate.h 52: , が必要 エラー E2453 C:\Program Files\Borland\CBuilder6\Include\stl/type_traits.h 64: '__true_type' 型のサイズは未知あるいはゼロ エラー E2453 C:\Program Files\Borland\CBuilder6Include\stl/type_traits.h 65: '__false_type' 型のサイズは未知あるいはゼロ エラー E2141 C:\Program Files\Borland\CBuilder6\Include\stl/type_traits.h 68: 宣言の構文エラー           ・           ・           ・ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

> bcc32 ***.c これが問題では? .cだとCのソースと解釈されます。

c-beginer
質問者

お礼

ありがとうございます。 Cだと複素数が扱えないのは調べて分かっていたのでC++でやっていたつもりでした。***.cppに変えたら意味不明なエラーが消えました。 意味不明なヘッダーのエラー?が出てた意味もわかりました。 解決しました。ありがとうございます。 PS 仕事もこんな感じで、うっかりミスが多いのでよく怒られてます。

その他の回答 (3)

回答No.3

complexは名前空間 std にあります。なので: #include <stdio.h> #include <complex.h> int main(void) { std::complex <double> z1, z2; z1 = std::complex <double>(1,2); z2 = std::complex <double>(2,3); printf("z1 = %lf+%lfi\n",z1.real(), z1.imag()); printf("z2 = %lf+%lfi\n",z2.real(), z2.imag()); return 0; }

c-beginer
質問者

お礼

std::や名前空間、ちらっと調べてみましたが、なんとなく分かったきがします。これを理解できたら一歩成長ですね。 頑張ってみます。 また、複素数の表示方法もあっているか不安だったので、書いて頂き(下記)大変参考になりました。 ありがとうございます。 printf("z1 = %lf+%lfi\n",z1.real(), z1.imag()); printf("z2 = %lf+%lfi\n",z2.real(), z2.imag());

回答No.2

再現できません。ちゃんと動いてくれます。 #include <iostream> #include <complex> int main() { std::complex<double> x(1.2, 3.4); std::complex<double> y(5.6, 7.8); std::complex<double> z; z = x + y; std::cout << x << '+' << y << '=' << z << std::endl; } /* 実行結果 */ (1.2,3.4)+(5.6,7.8)=(6.8,11.2)

c-beginer
質問者

お礼

ありがとうございます。 確かにコピペして実行してみると、ちゃんと動きました。 std::とか言うのがキーワードですね。 それに、iostreamって見やすくて分かりやすいですね。 存在すら知らなかったので、「std」と「iostream」両方共調べてみました。なんとなくは理解できて、使えるようにはなりました。 とっても勉強になりました。ありがとうございます。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

エラーが発生したソースを補足してください。

c-beginer
質問者

補足

以下にソースを書きました。 複素数が使えるかどうかの実験で、 z1=1+2i, z2=2+3iと表示させているつもりなんですが。。。 ====================================================== #include <stdio.h> #include <complex.h> int main(void) { complex <double> z1, z2; z1 = complex <double>(1,2); z2 = complex <double>(2,3); printf("z1 = %lf \n",&z1); printf("z2 = %lf \n",&z2); return 0; }

関連するQ&A