ファイルを分割して関数を別のファイルにおいたのですが値を返してもらおうとしても帰ってきません
どのようにしたら関数の値を得られますか?
大体このような感じですね
---main.cppの内容---
#include <stdio.h>
#include "betu.h"
void main( void ){
printf( "%d" , a );
}
---betu.hの内容---
static int a;
void betu( void );
---betu.cppの内容---
void betu( void ){
a = 5;
}
No.4ベストアンサー
- 回答日時:
「mainの中からbetu()を呼べ。
」呼んでません。void main( void ){
betu();
printf( "%d" , a );
}
とかで呼び出さないとbetu()は実行されません。
# プロトタイプ宣言は呼び出しではありません。
>こちらのサイトを参考にするとポインタ変数を渡してその値を返すようにしてもらえば動くって事ですか?
betu.cppがどうなっているのか?が問題です。
現状ではmain.cppからコールされていないので、betu.objがリンクされているかどうかも不明です。
betu.cppでbetu.hをインクルードしているのならば、
main.cppで参照しているaとbetu.cppで値を設定しているaは別のものですから期待した動作はしません。
Aさんの部屋にあるコップと、Bさんの部屋にあるコップ(どっちも同じ製品)で、Bさんの部屋のコップにジュースを入れたらAさんの部屋のコップにもジュースがわき出してきた。
なんてのがあり得るかどうか……。
Aさんの部屋のコップの場所を指定して、Bさんに「このコップにジュース入れて」と言えば入ってくるでしょうが…。
# 後者はポインタ渡しした場合。
---main.cppの内容---
#include <stdio.h>
#include "betu.h"
void main( void ){
printf( "%d" , a );
}
---betu.hの内容---
static int a;
void betu( int *a );
---betu.cppの内容---
void betu( int *a ){
*a = 5;
}
ポインタを渡せばいけました。
ありがとうございました。
大本のソースコードは長いので間違っていそうな箇所だけ同じように書いてみました
それはそれとしてお久しぶりです。
No.2
- 回答日時:
掲示されているソースで省略している部分はありませんか?
betu.cppでbetu.hをインクルードしていたりとか。
main.cppとbetu.cppの両方でbetu.hをインクルードしていた場合、
main.objとbetu.objの両方にstatic int a;が存在することになります。
「ファイルスコープ インクルード 変数」で検索するとよいでしょう。
この回答への補足
http://www.curiocube.com/mikata/progtips/ch06_gl …
こちらのサイトを参考にするとポインタ変数を渡してその値を返すようにしてもらえば動くって事ですか?
No.1
- 回答日時:
mainの中からbetu()を呼べ。
呼んでないから、aの値は不定のままだ(大抵は0で初期化されてるから0になるだろうけど)
あと、関数betu()は「void型」つまり「値は返さない」って言ってるんだから、値を返してもらえる訳がない。寝言は寝て言え。
K&Rの本でも読んで、基礎からやり直しておいで。
この回答への補足
---main.cppの内容---
#include <stdio.h>
#include "betu.h"
void betu( void );
void main( void ){
printf( "%d" , a );
}
---betu.hの内容---
#pragma once
static int a;
void betu( void );
---betu.cppの内容---
void betu( void ){
a = 5;
}
こんな感じにしてみましたが帰ってきませんでした。
あいにく貧乏なもので本を買えるお金がないのですよ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
- C言語・C++・C# プログラミングの授業のペーパーテスト 実行結果を答えろ #include int x[ ] = {1 3 2022/06/16 20:08
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# プログラミング実行後に表示される値を答えよ #include <stdio.h> void main 4 2022/05/28 10:20
- C言語・C++・C# C pointer? or... 2 2022/03/29 00:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがありま...
-
Notepad++の関数リスト表示の変...
-
C++にてtemplateで受け取った任...
-
ArduinoでMouse関数を使用して...
-
WNDPROC をクラスのメンバにも...
-
const_castのつかいどころを教...
-
【gcc・cygwin】multiple defin...
-
int main()、void main()、void...
-
コンパイルエラー: LNK2001
-
(void)0 はどんな意味ですか
-
解凍ソフト(C++builderで作成...
-
解凍ソフト(C++builderで作成...
-
C/C++でのScene管理について
-
一定時間ごとにプログラムを起...
-
VC++でGetKeyboardStateがうま...
-
C++別のオブジェクトからメンバ...
-
C# Controls.Addで動的に配置し...
-
【VC++6.0】イベントハンドラ関...
-
OpenSSLのSHA1関連の関数はどこ...
-
定義した文字列を wchar_t 系の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【gcc・cygwin】multiple defin...
-
int main()、void main()、void...
-
戻り値を返す関数の前に(void)...
-
既定のコンストラクタがありま...
-
Notepad++の関数リスト表示の変...
-
ArduinoでMouse関数を使用して...
-
多重定義が起きている?--lnk20...
-
C++にてtemplateで受け取った任...
-
静的でないメンバ関数の呼び出...
-
C# Controls.Addで動的に配置し...
-
const_castのつかいどころを教...
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
gcc: incompatible pointer type
-
C#でラジオボタンを設定に記録...
-
VC++でGetKeyboardStateがうま...
-
C言語 ① 5秒間 1秒間隔で点滅を...
-
void*型の配列について
-
GDI+の使用方法について
-
DirectInput でのエラー
おすすめ情報