VisualStudio2013でプログラミングしてます。
プログラミング初心者です。
以下のようなプログラムを組んだのですが、ソリューションのビルドをすると
[エラー1error LNK2005: _sinMakeArray は既に main.obj で定義されています]
[エラー1error LNK2005: _cosMakeArray は既に main.obj で定義されています]
というエラーが出ます。
何が原因かわかる方がいらっしゃいましたら教えてください。
お願いします。
■ファイル名[makearray.cpp]
#include <iostream>
using namespace std;
double getRazian(int);
void makeArray(){
double sinMakeArray[360], cosMakeArray[360];
for (int i = 0; i <= 180; i++){
double R = getRazian(i);
double R2 = R*R;
int k = 1;
double dev = 1.0;
double value = R;
double delta;
do{
R *= R2;
dev *= 2 * k*(2 * k + 1);
k++;
delta = R / dev;
value += delta*((k % 2) == 0 ? -1 : 1);
} while (delta / value > 1.0);
sinMakeArray[i] = value;
}
for (int i = 180; i <= 360; i++){
sinMakeArray[i] = sinMakeArray[i - 180] * -1;
}
for (int i = 0; i <= 90; i++){
cosMakeArray[i] = sinMakeArray[90 - i];
}
for (int i = 90; i <= 180; i++){
cosMakeArray[i] = cosMakeArray[180 - i] * -1;
}
for (int i = 180; i <= 360; i++){
cosMakeArray[i] = cosMakeArray[360 - i];
}
}
double get_sinMakeArray(int pp){
return sinMakeArray[pp];
}
double get_cosMakeArray(int pp2){
return cosMakeArray[pp2];
}
■ファイル名[main.cpp]
#include <iostream>
#include "makeArray.h"
using namespace std;
double getRazian(int degree);
int main(){
cout << getRazian(999) << '\n';
cout << get_sinMakeArray(180) << '\n';
cout << get_cosMakeArray(180) << '\n';
}
■ファイル名[makearray.h]
#ifndef MAKEARRAY_INCLUDE
#define MAKEARRAY_INCLUDE
extern"C"{
double sinMakeArray[360], cosMakeArray[360];
void makeArray();
double get_sinMakeArray(int);
double get_cosMakeArray(int);
}
#endif
■ファイル名[razian.cpp]
#include <iostream>
using namespace std;
double getRazian(int degree){
int degree2;
int degree3 = 0;
double r;
double pi = 3.1415926535;
degree2 = degree % 360;
if (degree2 <= 180){
r = degree2*pi / 180;
}
else{
degree3 = degree2 - 180;
r = degree3*pi / 180;
}
return r;
}
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
余談だけど, このプログラムの makeArray にバグがいることは分かってますよね?
そもそも makeArray で sinMakeArray とか定義したら外にあるやつにアクセスできないんだけど, それをおいたとしても.
御助言ありがとうございます。
makeArrayの内容をほぼ全部書き換え、sinMakeArrayのやっていた仕事を中に入れたら
欲しかった値を返してくれるようになりました。
どの範囲まで動いてくれるのかなど、曖昧になってることが多かったです。
勉強になりました。
No.2
- 回答日時:
makearray.hをインクルードしているソースファイルが他にもあるんでしょう。
ヘッダファイルで実体を定義している場合、そのヘッダファイルを複数のソースでインクルードすると多重定義になります。
定義の仕方次第にはなりますが、多重定義になればリンク時にエラーとなるでしょう。
どれ(どのソースファイル内の実体)を使えばいいのか判別できませんから。
なお…この場合のインクルードガードは期待する動作をしませんのでご注意を。
# 翻訳単位が異なりますから想定しているインクルードガードと動作が異なります。
No.1
- 回答日時:
とりあえず本題以前に確認したいんだが, この質問のタイトルの
「識別子が定義されていません」
と本文中にある
「_sinMakeArray は既に main.obj で定義されています」
とは一体どのような関係がある?
ちなみに角度の単位の「ラジアン」のスペルは radian だからね.
この回答への補足
返答ありがとうございます。
すみません。
私の間違いでした。
「識別子が定義されていません」のエラーは出ていませんでした。
こちらの「_sinMakeArray は既に main.obj で定義されています」が解決してないものです。
ラジアンの指摘もありがとうございました。
以後気をつけます。
解決することができました。
多重定義が問題だったようです。
間違いの多い質問にもかかわらず返信をくださりありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- FX・外国為替取引 mql4のコンパイルエラー箇所の修正お願いします。 1 2023/03/15 16:14
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
VC6でlong longでエラー?
-
2重定義って??
-
64bit → 32bit型へのキャスト
-
変数の型を定義しなかった場合...
-
visualstudio C# テキストボッ...
-
構造体の要素すべてに対する四...
-
ハンドルされていない例外が発...
-
関数の実体定義にヘッダファイ...
-
相互参照するクラス、俺こんな...
-
【#define】 defineで定義した...
-
intとINTの違いは?
-
C++でboolにintの値を代入する...
-
WM_NOTIFYのメッセージクラッカー
-
HINSTANCEの型
-
配列を用いない最大値の求め方
-
typedef enumの使い方を教えて...
-
正しいフロチャートの書き方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
long型の定数の末尾にLを付ける...
-
2重定義って??
-
typedef enumの使い方を教えて...
-
visualstudio C# テキストボッ...
-
C++のfor文について
-
関数の実体定義にヘッダファイ...
-
構造体の要素すべてに対する四...
-
ハンドルされていない例外が発...
-
C++でboolにintの値を代入する...
-
変数の型を定義しなかった場合...
-
intとINTの違いは?
-
main.c:7:43: warning: implici...
-
void func( void )について
-
C言語 宣言した変数になにも代...
-
【#define】 defineで定義した...
-
構造体の宣言でエラーが出ます。
-
C言語での方向キー入力判定
-
プログラムの中で別のmainを呼...
-
C言語について質問です。 子プ...
おすすめ情報