C言語を使用してプログラムでスタックを実装しようとしています。私はそれらを3つのファイルに分けます。.cファイルに.hファイルを含めるとLNK2005が発生する
最初に、stack.hファイル。スタックにはPop、Pushなどの必須の宣言と関数が含まれています。 第2に、stack.cファイル。これは、stack.hファイル内の関数を実装するファイルです。私の場合は、動的配列を使ってスタックを実装します。 第3に、main.cファイル。スタックを使用して計算を行う場所です。
しかし、私はLNK2005(... objで既に定義されています)の末尾にコンパイルエラーが発生します。私は、このエラーは複数の定義が存在する場合に起こることを知っています。しかし、.h/.cファイルで同じ関数名を持つ多くの例を見ましたが、エラーは発生しませんでした。あなたのための親切な注意
LNK1169 one or more multiply defined symbols found
LNK2005 _CreateStack already defined in main.obj
LNK2005 _IsEmpty already defined in main.obj
LNK2005 _Pop already defined in main.obj
LNK2005 _Push already defined in main.obj
LNK2005 _StackDepth already defined in main.obj
ありがとう:ここ
はエラーログです。 ここに私のstack.hファイルがあります。typedef struct Stack Stack;
Stack* CreateStack();
void Push(Stack *s, char InputString);
void Pop(Stack *s);
int StackDepth(Stack *s);
int IsEmpty(Stack *s);
ここに私のstack.cファイルがあります。ここで
#include "stack.h"
typedef struct Stack{
.....
.....
}
Stack* CreateStack(){
......
};
void Push(Stack *s, char InputString){
....
....
}
void Pop(Stack *s){
....
};
int StackDepth(Stack *s){
....
};
int IsEmpty(Stack *s){
....
};
は私のmain.cファイルには、あなたがあなたのメインのファイルで、あなたのCファイルが含まれている
#include<stdio.h>
#include"stack.c"
#include"stack.h"
int main(){
....
....
....
return 0;
}
あなたの質問を編集して実際のリンクエラーを表示できますか?あなたの関数定義の最後にセミコロンを置くと、それらは役に立たない。 –
ありがとうございました。よく編集されました。 – Hugo