重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

先ほどはありがとうございました。
私の考え方が違っていたようで、

main.cpp
で使っているグローバル変数をsub.cpp内で使いたい。
sub.cpp
に記述している関数をmain.cppから呼び出したいときは
どうしたらいいでしょうか?

ヘッダファイルの書き方がわからないのです><

XPでStudio.NETでプログラミングしています。
よろしくお願いします><

A 回答 (6件)

#include<・・・>によって、どのような動作を


指示したことになるのか理解できれば、
今お持ちの疑問は払拭されると思いまふ。


-- sub.h --
#ifndef _SUB_H_INCLUDED_HOGEHOGE
#define _SUB_H_INCLUDED_HOGEHOGE

void sub_write(void);

#endif // _SUB_H_INCLUDED_HOGEHOGE

-- sub.cpp --
#include <stdio.h>
#include "sub.h"

extern char global_a[100]; // どっかで宣言されてることをコンパイラに知らす

void sub_write(void){
 printf("global value : '%s'\n", global_a);
}


-- main.cpp --

#include <string.h>
#include "sub.h"

char global_a[100];

int main(void){
//sprintf(a, "hello.");
 strcpy(global_a, "hello");
 sub_write();
 return 0;
}

この回答への補足

#1様、#2様、わかりやすい説明ありがとうございます。

教えていただいたとおりやったらできましたが、教えていただいたとおりの手順に沿って

私の書いているプログラムに適応させると

1行の警告と1行のエラーがでてコンパイル出来ません。

教えていただいた通りに書いているつもりなのですが・・・。

main.cppとhyoujun.cppとmain.hの3つのファイルを用いています。


warning LNK4075: /EDITANDCONTINUE は /INCREMENTAL:NO の指定によって無視されます。

error LNK2005:"void (__cdevl** hyoujun)(void)" (?hyoujun@@3PAP6AXXZA)は既にhyoujun.objで定義されています。


です。どうなっているのでしょうか><

補足日時:2006/02/27 17:23
    • good
    • 0

色々と端折って言うと、


#include "aaa.h"
と書くと、その場所にaaa.hの中身を書いたことになります。

ヘッダの中身を一度ソースに移して、間違いがあったら(2重定義など)なおし、その上で共通部分をヘッダに落としてはいかがかしら
    • good
    • 0

void (*hyoujun[])( void ) =


{
hyoujun_detail0,
hyoujun_detail1,
...
}

これは実装(定義)なのでヘッダに置いてはなりません。
ヘッダに書けるのは↓これだけ。
extern void (*hyoujun[])( void );
    • good
    • 0

普通は、変数や関数の実体の記述は .cpp で行い、.h では extern で宣言します。



たとえば、main.cppで
char a[100];

main.hで
extern char a[100];

とすれば main.h をインクルードしておけば、a を使えます。

関数も同じように extern で宣言してやれば他のソースから使えます。

しかし、これは C++ の基本的なことなので、こういう所で質問する前に、ちゃんと入門書で勉強された方がいいとおもいます。
    • good
    • 0

> main.cppとhyoujun.cppとmain.hの3つのファイルを用いています。


> ...
> error LNK2005:"void (__cdevl** hyoujun)(void)" (?hyoujun@@3PAP6AXXZA)は既にhyoujun.objで定義されています。

main.h を提示してください。
このなかに(宣言ではなく)実装が含まれている可能性大です。

この回答への補足

ちょっと長いのですが・・。こちらです。

#ifndef _MAIN_H_INCLUDED_HOGEHOGE
#define _MAIN_H_INCLUDED_HOGEHOGE

void waip(int waip1,int waip2);

void outchar0(char str1[300],char str2[300]);
void outchar1(char str1[300],char str2[300]);

void hyoujun_detail0( void );
void hyoujun_detail1( void );
void hyoujun_detail2( void );
void hyoujun_detail3( void );
void hyoujun_detail4( void );
void hyoujun_detail5( void );
void hyoujun_detail6( void );
void hyoujun_detail7( void );
void hyoujun_detail8( void );
void hyoujun_detail9( void );
void hyoujun_detail10( void );
void hyoujun_detail11( void );
void hyoujun_detail12( void );
void hyoujun_detail13( void );
void hyoujun_detail14( void );
void hyoujun_detail15( void );
void hyoujun_detail16( void );
void hyoujun_detail17( void );

void (*hyoujun[])( void ) =
{
hyoujun_detail0,
hyoujun_detail1,
hyoujun_detail2,
hyoujun_detail3,
hyoujun_detail4,
hyoujun_detail5,
hyoujun_detail6,
hyoujun_detail7,
hyoujun_detail8,
hyoujun_detail9,
hyoujun_detail10,
hyoujun_detail11,
hyoujun_detail12,
hyoujun_detail13,
hyoujun_detail14,
hyoujun_detail15,
hyoujun_detail16,
hyoujun_detail17,

} ;

#endif // _MAIN_H_INCLUDED_HOGEHOGE

よろしくお願いします><

補足日時:2006/02/27 22:14
    • good
    • 0

---- sub.h ---


#ifndef SUB_H__
#define SUB_H__

void sub();

#endif

--- sub.cpp ---
#include "sub.h"

void sub() {
// sub() を実装する
}

--- main.cpp ---
#include "sub.h"

int main() {
sub(); // sub()を呼ぶ
}
    • good
    • 0

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