vc++用法,怎样包含头文件
我定义了三个函数function1()、function2()、function3()和一个头文件stack.h和一个主函数sourcemain。每个function函数...
我定义了三个函数function1()、function2()、function3()和一个头文件stack.h和一个主函数sourcemain。每个function函数单独一个.cpp文件。并且三个函数都用到了头文件stack.h。
那我在写每个function函数的头的时候都写上#include "stack.h"这个头吗,并且我在main函数中也把这个stack.h头文件加进来了。编译时通过了,但链接失败,显示
function1.obj : error LNK2005: "int __cdecl InitStack(struct SqStack &)" already defined in sourcemain.obj
function1.obj : error LNK2005: "int __cdecl GetTop(struct SqStack,int &)" already defined in sourcemain.obj
function1.obj : error LNK2005: "int __cdecl Push(struct SqStack &,int)" already defined in sourcemain.obj
function2.obj : error LNK2005: "bool __cdecl StackEmpty(struct SqStack &)" (?StackEmpty@@YA_NAAUSqStack@@@Z) already defined in sourcemain.obj
function2.obj : error LNK2005: "int __cdecl InitStack((?already defined in sourcemain.obj
……
上面的InitStack,GetTop等都是我定义的栈中的具体操作,sourcemain是我的主函数,到底在三个function函数的头部怎么写才行啊?或者具体该怎么改啊?
在主函数中都调用了那三个function函数啊,分别是用来实现不同进制之间的转换的(利用头文件中定义的栈),
头文件栈的定义中我写了
#ifndef _STACK_H_
#define _STACK_H_
……//栈的实现及操作
#endif 还是链接错误啊
那三个文件分别在三个不同的cpp文件里,在主函数中去调用它们,三个函数名在主函数的头部已经声明了,编译通过了,链接不过
stdafx.h是什么啊,我没有定义stdafx.h这个头文件啊! 展开
那我在写每个function函数的头的时候都写上#include "stack.h"这个头吗,并且我在main函数中也把这个stack.h头文件加进来了。编译时通过了,但链接失败,显示
function1.obj : error LNK2005: "int __cdecl InitStack(struct SqStack &)" already defined in sourcemain.obj
function1.obj : error LNK2005: "int __cdecl GetTop(struct SqStack,int &)" already defined in sourcemain.obj
function1.obj : error LNK2005: "int __cdecl Push(struct SqStack &,int)" already defined in sourcemain.obj
function2.obj : error LNK2005: "bool __cdecl StackEmpty(struct SqStack &)" (?StackEmpty@@YA_NAAUSqStack@@@Z) already defined in sourcemain.obj
function2.obj : error LNK2005: "int __cdecl InitStack((?already defined in sourcemain.obj
……
上面的InitStack,GetTop等都是我定义的栈中的具体操作,sourcemain是我的主函数,到底在三个function函数的头部怎么写才行啊?或者具体该怎么改啊?
在主函数中都调用了那三个function函数啊,分别是用来实现不同进制之间的转换的(利用头文件中定义的栈),
头文件栈的定义中我写了
#ifndef _STACK_H_
#define _STACK_H_
……//栈的实现及操作
#endif 还是链接错误啊
那三个文件分别在三个不同的cpp文件里,在主函数中去调用它们,三个函数名在主函数的头部已经声明了,编译通过了,链接不过
stdafx.h是什么啊,我没有定义stdafx.h这个头文件啊! 展开
4个回答
展开全部
你这是重复定义的问题,头文件并不参加编译,所以你能通过编译,但是连接器会展开头文件,这时就出问题了;
首先主函数中包含了头文件,里面定义了一些InitStack,GetTop等数据,在打开cpp文件时,又展开这个头文件,再次定义,所以出现重复定义的问题;
解决办法:
增加一个头文件extern.h
将你的头文件里面的内容复制进去,只是有一点,复制进去后,将所有声明的函数 变量前加上 extern 表示在其他地方声明了,而类和结构体不用加,因为类和结构体不存在重复定义问题;
接下来,在主函数cpp文件中包含你的头文件,在其他三个cpp文件中包含 extern.h文件
首先主函数中包含了头文件,里面定义了一些InitStack,GetTop等数据,在打开cpp文件时,又展开这个头文件,再次定义,所以出现重复定义的问题;
解决办法:
增加一个头文件extern.h
将你的头文件里面的内容复制进去,只是有一点,复制进去后,将所有声明的函数 变量前加上 extern 表示在其他地方声明了,而类和结构体不用加,因为类和结构体不存在重复定义问题;
接下来,在主函数cpp文件中包含你的头文件,在其他三个cpp文件中包含 extern.h文件
展开全部
那几个函数CPP干什么用了?没看到你用啊
这个估计你是重复包含头文件了
应该stack.h 头部写上类似下边这种东西。
#ifndef _STACK_H_
#define _STACK_H_
#endif
------------------------------------
那3个函数的声明在哪里?是不是也在哪个头文件里?如果是也像之前说的那样加个别的名字的东西,防止重复包含头文件。。别的文件怎么调用这3个函数的?
这个估计你是重复包含头文件了
应该stack.h 头部写上类似下边这种东西。
#ifndef _STACK_H_
#define _STACK_H_
#endif
------------------------------------
那3个函数的声明在哪里?是不是也在哪个头文件里?如果是也像之前说的那样加个别的名字的东西,防止重复包含头文件。。别的文件怎么调用这3个函数的?
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以试试以下步骤:
1、将那三个函数包含语句(#include "stack.h")迁到CPP文件中
2、再将他们各自的头文件中添加一个结构体声明(struct SqStack;)应该就可以了吧!
1、将那三个函数包含语句(#include "stack.h")迁到CPP文件中
2、再将他们各自的头文件中添加一个结构体声明(struct SqStack;)应该就可以了吧!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
每个CPP都要加上
#include "stdafx.h"
#include "stdafx.h"
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询