

No.2ベストアンサー
- 回答日時:
#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で定義されています。
です。どうなっているのでしょうか><
No.6
- 回答日時:
色々と端折って言うと、
#include "aaa.h"
と書くと、その場所にaaa.hの中身を書いたことになります。
ヘッダの中身を一度ソースに移して、間違いがあったら(2重定義など)なおし、その上で共通部分をヘッダに落としてはいかがかしら
No.5
- 回答日時:
void (*hyoujun[])( void ) =
{
hyoujun_detail0,
hyoujun_detail1,
...
}
これは実装(定義)なのでヘッダに置いてはなりません。
ヘッダに書けるのは↓これだけ。
extern void (*hyoujun[])( void );
No.4
- 回答日時:
普通は、変数や関数の実体の記述は .cpp で行い、.h では extern で宣言します。
たとえば、main.cppで
char a[100];
main.hで
extern char a[100];
とすれば main.h をインクルードしておけば、a を使えます。
関数も同じように extern で宣言してやれば他のソースから使えます。
しかし、これは C++ の基本的なことなので、こういう所で質問する前に、ちゃんと入門書で勉強された方がいいとおもいます。
No.3
- 回答日時:
> 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
よろしくお願いします><
No.1
- 回答日時:
---- 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()を呼ぶ
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA public変数はどのようなこ...
-
Excel VBA: private sub 内の...
-
GetNextWindowがDLLファイルUse...
-
演奏記号の・・・・
-
VB.NETでのイベントの途中終了
-
他のフォームから別のフォーム...
-
VBAで入力数値について
-
【HTML、VBScript】HTAアプリケ...
-
アクセスできない保護レベルエ...
-
RichTextBoxで指定行の色を自動...
-
VB6でForm_Load中にイベントを...
-
エクセルのVBAでの7×7の魔方陣...
-
VB6でClickイベントを一時的に...
-
FlexGridで文字色を変更。
-
【VB6.0】 あるフォームから他...
-
VB2005テキストボックスへのコ...
-
VBAでcallで呼び出したsubを終...
-
【C#】コンボボックスにおけるS...
-
ExcelのVBAで文章にある複数の...
-
vbsのmsgboxランダム表示について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA public変数はどのようなこ...
-
GetNextWindowがDLLファイルUse...
-
Excel VBA: private sub 内の...
-
演奏記号の・・・・
-
pthread_cond_waitとptherad_co...
-
日付の取得VB.NET.では
-
分割コンパイルの方法がわかり...
-
プロキシでキャッシュされる/...
-
再帰呼び出し
-
VBA 再帰について
-
アクセスできない保護レベルエ...
-
C#のループでtextboxに値を入れ...
-
visual basic初心者です。 visu...
-
VB.NETでのイベントの途中終了
-
他のフォームから別のフォーム...
-
エクセルVBAでテキストボッ...
-
【VB.NET】テキストボックスに...
-
プロシージャまたは関数の引数...
-
VBAで入力数値について
-
チェックボックスを操作できな...
おすすめ情報