質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

2467閲覧

別ファイルに関数の引数を渡す方法を教えてください。

Domyyyy

総合スコア4

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/09/16 03:39

編集2020/09/16 04:12

2つのファイルmain.cpp、CalcDay.cpp間で配列の引数を渡したいです。

エラーコードに従ってこのような書き方をしていますが、それでもエラーコードが出ます。
どうしたら別のファイルに引数を渡し、実行できるようになりますか?教えてください。

main.cpp void display(){ (省略) Day(int nBDay[3],int nYMD[3]);//CalcDay.cppのDay関数に引数を渡すため呼び出しました (省略) }; CalcDay.h int Day(int nBDay[3],int nYMD[3]);//ヘッダファアイルではこのような定義をしました。 CalcDay.cpp int Day(int nBDay[3],int nYMD[3]){ //処理 }

これをコンパイルすると以下のエラー文になります。

error

1main.cpp: In function 'void display()': 2main.cpp:52:16: error: expected primary-expression before 'int' 3 52 | Day(int nBDay[3],int nYMD[3]); 4 | ^~~ 5main.cpp:52:29: error: expected primary-expression before 'int' 6 52 | Day(int nBDay[3],int nYMD[3]); 7 | ^~~

うえのエラーコードの通りにintを外し、コンパイルすると

main.cpp:52:23: error: invalid conversion from 'int' to 'int*' [-fpermissive] 52 | Day(nBDay[3],nYMD[3]); | ~~~~~~~^ | | | int In file included from main.cpp:1: CalcDay.h:25:14: note: initializing argument 1 of 'int Day(int*, int*)' 25 | int Day(int nBDay[3],int nYMD[3]); | ~~~~^~~~~~~~ main.cpp:52:31: error: invalid conversion from 'int' to 'int*' [-fpermissive] 52 | Day(nBDay[3],nYMD[3]); |      ~~~~~~~^ | | | int In file included from main.cpp:1: CalcDay.h:25:27: note: initializing argument 2 of 'int Day(int*, int*)' 25 | int Day(int nBDay[3],int nYMD[3]); | ~~~~^~~~~~~

というエラー文が出てきて来てしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

display()内の

Day(int nBDay[3],int nYMD[3]);

int が要らない.

投稿2020/09/16 03:44

fana

総合スコア11996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Domyyyy

2020/09/16 03:51

返信ありがとうございます。それを試し、コンパイルをすると main.cpp:52:23: error: invalid conversion from 'int' to 'int*' [-fpermissive] 52 | Day(nBDay[3],nYMD[3]); | ~~~~~~~^ | | | int In file included from main.cpp:1: CalcDay.h:25:14: note: initializing argument 1 of 'int Day(int*, int*)' 25 | int Day(int nBDay[3],int nYMD[3]); | ~~~~^~~~~~~~ main.cpp:52:31: error: invalid conversion from 'int' to 'int*' [-fpermissive] 52 | Day(nBDay[3],nYMD[3]); | ~~~~~~^ | | | int In file included from main.cpp:1: CalcDay.h:25:27: note: initializing argument 2 of 'int Day(int*, int*)' 25 | int Day(int nBDay[3],int nYMD[3]); | ~~~~^~~~~~~ というエラーになってしまい、.hにはintがついて定義されているからintをつけて、というような指示文が返ってきてしまいます。
fana

2020/09/16 04:00 編集

display()内の(省略)部分にて決定されていると思われる, nBDay や nYMD の定義(型)による. もしも int nBDay[3]; のような定義なのだとしたら,当然,Day()を呼び出す際の引数は nBDay[3] ではなく, nBDay となるだろう. つまり, Day( nBDay, nYMD ); //呼び出し
fana

2020/09/16 04:03

(おおっと! 質問コードを良く見ると, Day, Days, Daze と全てが異なっている! なぜだ?罠なのか?)
Domyyyy

2020/09/16 04:10

すみません、別のファイルで試したものを間違って載せてしまいました…書き直します。ご指摘ありがとうございます。罠ではありません…! 配列を引数で渡す場合、Day( nBDay, nYMD ); という書き方でも配列ごと渡せますか?
fana

2020/09/16 04:49

2つ↑のコメントの末尾で > Day( nBDay, nYMD ); //呼び出し と,書きましたぞ. 余談: 「配列を引数で渡す」と言うと語弊があるのかもしれません. 「配列の先頭要素の場所を示すポインタの値を引数に渡す」とか何とか,そんな感じの言い回しになります.
Domyyyy

2020/09/16 05:20

fanaさんの指摘通り私は(一部省略)の部分で int nBDay[3]; と定義しております。なのでmain.cppでの呼び出しを指示通り記入しました。また、引数はnBDayになるとおっしゃっていたことを踏まえ、 Day(nBDay,nYMD);//main.cpp ↑以外のファイルでも[3]を用いず、 int Day(int nBDay,int nYMD);//CalcDay.h int Day(int nBDay,int nYMD){};//CalcDay.cpp という表記にしました。 それをコンパイルしたらエラーがなくなりました! 質問文に不備があったにもかかわらず丁寧に教えていただきありがとうございました。とても助かりました。
guest

0

vectorを使った別ファイルからの配列参照参考コード

直接の回答ではないですが・・・

C++のvectorまとめ
動的配列クラス std::vector とは

せっかくC++を使うならstd::vectorを使いましょう。
C言語の配列とか静的配列と呼ばれる配列名[10]などは慣れないと使い勝手が良くないことが多いと思います。
特に初心者であればまずstd::vector使い方に慣れたほうが近道だと思います。
その後どうしても静的配列を使わなければならないようならその時に学習すれば良いと思います。


どうしてもC言語の配列とか静的配列と呼ばれる配列名[10]を渡したい場合は・・・

関数に静的配列を渡す時は配列サイズは何を書いても一緒らしく、
静的配列を渡すには配列名[]配列サイズ用の別の変数を渡してあげるのが使いやすいです。
int func(int a[],int arr_size){//略} など。

類似質問

c++では配列[]はあまり使わないものなんですか?

類似質問

void funcB(const char *c[AS])
void funcB(const char c[255]) / 配列サイズに何を書いても一緒 */
void funcB(const char *c[])
void funcB(const char **c)

投稿2020/09/16 05:13

編集2020/09/16 05:19
mjk

総合スコア303

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問