変数がy1のときだけ、エラーが出ます。

[戻る]
BBA 2009/05/26(火) 10:54:39
はじめまして。BBAです。

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <glui.h>
#include "glut.h"
#include <math.h>
#pragma comment (lib,"glui32.lib")
#define PI 3.14159
using namespace std;
/* グローバル変数としてx1, y1, y2を定義 */
double x1 = 0.0;
double y1 = 0.03;
double y2 = 0.0;

void CUBE(double X0, double X1, double Y0, double Y1, double Y2, double Z0, 
double Z1)
{
/* 直方体を作るプログラム */
}
void equation(void)
{
        ・
        ・
        ・
 CUBE(-1.0, 0.0, 0.0, y1, 0.0, 0.0, 1.0) 
 CUBE(0.0, x1, 0.0, y1, y2, 0.0, 1.0)
        ・
        ・
        ・
}
int main(int argc, char* argv[])
{
        ・
        ・
        ・
 cout << "x1, y1, y2を入力してください。\n";
 cin  >> x1 >> y1 >> y2;
        ・
        ・
        ・
}

error C2365: 'y1' : 再定義; 以前の定義は '関数' でした。
error C2664: 'CUBE' : 4 番目の引数を 'double (double)' から 'double' に変換でき
ません。コンテキストはオーバーロードされた関数の非不明瞭を考慮しません。
error C2664: 'CUBE' : 4 番目の引数を 'double (double)' から 'double' に変換でき
ません。コンテキストはオーバーロードされた関数の非不明瞭を考慮しません。
error C2679: 二項演算子 '>>' : 型 'double (__cdecl *)(double)' の右オペランドを
扱う演算子が見つかりません (または変換できません)。



このように、main関数の中でcin >> x1 >> y1 >> y2として値を入力させようとしている
のですが、なぜかy1だけがエラーが出てしまいます。
y1という関数を作ったわけではないのですが。
y1の部分をyやyyyなどに変更するとエラーが出ません。

この原因お分かりになりますでしょうか?



環境:WinXP Microsoft Visual Studio .NET 2003 MFC

Blue 2009/05/26(火) 11:02:57
y1はmath.hにあるBessel 系関数らしいです。
→変数名y1をあきらめるのが最善。

BBA 2009/05/26(火) 12:27:36
Blueさんありがとうございます。
ベッセル関数についてネットで調べたところ、y0,ynもダメなようですね。
y2, y3, y4・・・は使えるんですよね?

tetrapod 2009/05/26(火) 14:37:34
y2 y3 は使える
j0 j1 jn は使えない (j2 j3 は使える)

C++ 限定でよければ無名 namespace を使うことで j0 j1 や y0 y1 という名前を
グローバル変数というか無名 namespace 内静的変数として使える。

まあグローバル変数を使わないのが一番。
本当にそんな(意味のわからない名前の)グローバル変数が必要かどうかを再検討。

BBA 2009/05/26(火) 22:17:04
[[解決]]
tetrapodさんありがとうございます。

とても助かりました。

古いスレッドには追加発言できません。