【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール掲示板2こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.21490

関数の名前を変えるとエラー
投稿者---やっさん(2005/06/19 22:01:38)


C言語で(C++では無いです)複素数のライブラリを自作しています.
複素数の絶対値を返す関数として,
double cabs(Complex);
をヘッダファイルに宣言しました.
これを,ヘッダファイル単体でコンパイルすると問題なくコンパイルが通ります.
ところが,ソースファイルにこのヘッダファイルをインクルードすると,
double cabs(Complex);
の行でエラーがでます.
一体なぜなのでしょう??

そして,cabs の名前を cabs_1 に変えて
double cabs_1(Complex);
とヘッダに宣言すると,
ヘッダファイル単体でも,ソースファイルにインクルードしても
どちらでもコンパイルが通ります.

私には全くわからないので,
どなたかお分かりになれば教えていただきたいです.
よろしくお願いします.


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:関数の名前を変えるとエラー 21492 まきじ 2005/06/19 23:29:51
<子記事> Re:関数の名前を変えるとエラー 21494 nop 2005/06/20 00:39:12
<子記事> Re:関数の名前を変えるとエラー 21497 やっさん 2005/06/20 15:06:04
<子記事> Re:関数の名前を変えるとエラー 21500 επιστημη 2005/06/20 15:44:05


No.21492

Re:関数の名前を変えるとエラー
投稿者---まきじ(2005/06/19 23:29:51)


>ところが,ソースファイルにこのヘッダファイルをインクルードすると,
>double cabs(Complex);
>の行でエラーがでます.
>一体なぜなのでしょう??

どういうエラーでしょうか?
ソースも提示して下さい。


この投稿にコメントする

削除パスワード

No.21494

Re:関数の名前を変えるとエラー
投稿者---nop(2005/06/20 00:39:12)


>これを,ヘッダファイル単体でコンパイルすると問題なくコンパイルが通ります.

通常、ヘッダファイルは単独でコンパイルするものではありません。


>エラーがでます.
>一体なぜなのでしょう??

「掲示板ご利用上の注意」はよく読みましたか?

# ※環境(OSとコンパイラ)や症状は具体的に詳しく!

エラーが出たのなら、エラーが出たソースと、
出力されたエラーメッセージがなければ、

 「あなたのソースがおかしいから」

としか、回答できません。


この投稿にコメントする

削除パスワード

No.21496

Re:関数の名前を変えるとエラー
投稿者---RAPT(2005/06/20 09:03:51)


externとか?


この投稿にコメントする

削除パスワード

No.21497

Re:関数の名前を変えるとエラー
投稿者---やっさん(2005/06/20 15:06:04)


申し訳ありませんでした.
もう少し詳しく書かせて頂きます.

開発環境はWinXP,コンパイラはBCC(Borlandのフリーコンパイラ)です.

ソースは
typedef struct {
double re;
double im;
}Complex;
で,複素数型を宣言して,これを用いています.
関数として,複素数同士のの掛け算,割り算,ルート,絶対値,偏角,等を作っていて,
Complex cmul(Complex, Complex);
Complex cdiv(Complex, Complex);
Complex csqrt(Complex);
double cabs(Complex);
double carg(Complex);
……
とヘッダファイル"myComplex.h"に宣言をしています.

これをインクルードしてコンパイルすると,
ヘッダファイルの
double cabs(Complex);
の行で
「 )が必要 」というエラーがでます.

自分で注意深く見直しましたが,ヘッダファイル上で
)が足りない部分はありません.

ただ,試行錯誤してみて気づいたのですが,
ソースファイルにインクルードするときに
#include <math.h> の後に
#include "myComplex.h"
と書くと上記のエラーがでて,
#include <math.h> の前に
#include "myComplex.h"
と書くとコンパイルは通ります.
この辺りに問題があるようです.

すいませんが,よろしくお願いします.


この投稿にコメントする

削除パスワード

No.21499

Re:関数の名前を変えるとエラー
投稿者---おでん(2005/06/20 15:37:21)


>ただ,試行錯誤してみて気づいたのですが,
>ソースファイルにインクルードするときに
>#include <math.h> の後に
>#include "myComplex.h"
>と書くと上記のエラーがでて,
>#include <math.h> の前に
>#include "myComplex.h"
>と書くとコンパイルは通ります.
>この辺りに問題があるようです.
>
math.hに定義がありますね?

#define cabs(z) (hypot ((z).x, (z).y))
#define cabsl(z) (hypotl ((z).x, (z).y))


この投稿にコメントする

削除パスワード

No.21503

Re:関数の名前を変えるとエラー
投稿者---やっさん(2005/06/20 15:49:27)


>#define cabs(z) (hypot ((z).x, (z).y))
>#define cabsl(z) (hypotl ((z).x, (z).y))

本当です.ありました.
ありがとうございます.

これを無効にする方法はありますか?
<math.h>から上記の部分を削除するのが手っ取り早いんでしょうか?


この投稿にコメントする

削除パスワード

No.21507

Re:関数の名前を変えるとエラー
投稿者---まきじ(2005/06/20 16:10:50)


>これを無効にする方法はありますか?
><math.h>から上記の部分を削除するのが手っ取り早いんでしょうか?

cabs という名前が使いたくて、math.h を使わないのであれば、
それでも良いと思いますが、math.h を使ってるのであれば
別名にするしかないと思います。


この投稿にコメントする

削除パスワード

No.21510

Re:関数の名前を変えるとエラー
投稿者---おでん(2005/06/20 16:19:16)


>
>これを無効にする方法はありますか?
><math.h>から上記の部分を削除するのが手っ取り早いんでしょうか?

C99では、複素数演算をサポートしていますが?
それを使うのはだめですか?

/* cabs 関数の使用例 */ BCBのヘルプから引用
#include <stdio.h>

#include <math.h>

#ifdef __cplusplus
  #include <complex.h>
#endif

#ifdef __cplusplus /* C++ では, クラス complex を使用 */

  void print_abs(void)
  {
    complex <float>z(1.0, 2.0);
    double  absval;

    absval = abs(z);
    printf("%.2lfi %.2lfj の絶対値は %.2lf", 
      real(z), imag(z), absval);
  }

#else  /* 次に示された関数は C である(C++ ではない) */

  void print_abs(void)
  {
    struct complex z;

    double absval;

    z.x = 2.0;
    z.y = 1.0;
    absval = cabs(z);

    printf("%.2lfi %.2lfj の絶対値は %.2lf", 
      z.x, z.y, absval);
  }

#endif

int main(void)
{
  print_abs();
  return 0;
}



この投稿にコメントする

削除パスワード

No.21517

Re:関数の名前を変えるとエラー
投稿者---やっさん(2005/06/20 21:30:19)


>C99では、複素数演算をサポートしていますが?
>それを使うのはだめですか?

情けない話なのですが,
C99やC++が不慣れなもので…
しかも結果を急ぎますので…

やはり別名にするのが1番早そうですね.
ありがとうございました.


この投稿にコメントする

削除パスワード

No.21522

Re:関数の名前を変えるとエラー
投稿者---nop(2005/06/21 09:54:59)


>C99やC++が不慣れなもので…
>しかも結果を急ぎますので…

結果を急ぐなら、始めから標準のものを使うべきかと。
勉強すれば今後の役にも立つし、
作成・デバッグの必要もないから、早かったのに。


この投稿にコメントする

削除パスワード

No.21511

Re:関数の名前を変えるとエラー
投稿者---かずま(2005/06/20 16:22:06)


#include <math.h>
#undef cabs



この投稿にコメントする

削除パスワード

No.21500

Re:関数の名前を変えるとエラー
投稿者---επιστημη(2005/06/20 15:44:05)


>C言語で(C++では無いです)複素数のライブラリを自作しています.

腰を折るようで申し訳ないのですけども、
C++なら基本的な複素数演算が標準ライブラリで提供されています。



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧