プロが教えるわが家の防犯対策術!

ファイルを分割して関数を別のファイルにおいたのですが値を返してもらおうとしても帰ってきません
どのようにしたら関数の値を得られますか?

大体このような感じですね

---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;

}

A 回答 (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さんに「このコップにジュース入れて」と言えば入ってくるでしょうが…。
# 後者はポインタ渡しした場合。
    • good
    • 0
この回答へのお礼

---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;

}

ポインタを渡せばいけました。
ありがとうございました。


大本のソースコードは長いので間違っていそうな箇所だけ同じように書いてみました
それはそれとしてお久しぶりです。

お礼日時:2013/03/14 12:29

……確かに呼んでないですな……。

    • good
    • 0

掲示されているソースで省略している部分はありませんか?


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 …

こちらのサイトを参考にするとポインタ変数を渡してその値を返すようにしてもらえば動くって事ですか?

補足日時:2013/03/14 11:26
    • good
    • 0

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;

}

こんな感じにしてみましたが帰ってきませんでした。

あいにく貧乏なもので本を買えるお金がないのですよ

補足日時:2013/03/14 11:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!