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

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: 宣言の構文エラー
          ・
          ・
          ・
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

A 回答 (4件)

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

この回答への補足

以下にソースを書きました。
複素数が使えるかどうかの実験で、
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;
}

補足日時:2008/01/26 17:15
    • good
    • 0

再現できません。

ちゃんと動いてくれます。

#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)
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/27 12:30

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;
}
    • good
    • 0
この回答へのお礼

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

printf("z1 = %lf+%lfi\n",z1.real(), z1.imag());
printf("z2 = %lf+%lfi\n",z2.real(), z2.imag());

お礼日時:2008/01/27 12:36

> bcc32 ***.c



これが問題では?
.cだとCのソースと解釈されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/01/27 12:44

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