c++ 在头文件中定义的变量不可用?还有一个问题就是头文件的ifndef __tMAIN_H有啥用呢?
tmain.h头文件-----------------------------------#ifndef__tMAIN_H#define__tMAIN_Htypedefs...
tmain.h头文件
-----------------------------------
#ifndef __tMAIN_H
#define __tMAIN_H
typedef struct
{
int aa;
long int bb;
unsigned char cc;
}tStruct;
#define EME int;
#endif
--------------------------------
主函数 main.c
#include<iostream>
using namespace std;
#include"tmain.h"
void main()
{
EME a=5;
sStruct b;
}
----------------------------------
出错信息:
警告 1 warning C4091: “”: 没有声明变量时忽略“int”的左侧 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 6
错误 2 error C2065: “a”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 6
错误 3 error C2065: “sStruct”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7
错误 4 error C2146: 语法错误 : 缺少“;”(在标识符“b”的前面) e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7
错误 5 error C2065: “b”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7 展开
-----------------------------------
#ifndef __tMAIN_H
#define __tMAIN_H
typedef struct
{
int aa;
long int bb;
unsigned char cc;
}tStruct;
#define EME int;
#endif
--------------------------------
主函数 main.c
#include<iostream>
using namespace std;
#include"tmain.h"
void main()
{
EME a=5;
sStruct b;
}
----------------------------------
出错信息:
警告 1 warning C4091: “”: 没有声明变量时忽略“int”的左侧 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 6
错误 2 error C2065: “a”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 6
错误 3 error C2065: “sStruct”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7
错误 4 error C2146: 语法错误 : 缺少“;”(在标识符“b”的前面) e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7
错误 5 error C2065: “b”: 未声明的标识符 e:\计算机知识\st750实验\c测试\c测试\c测试\main.cpp 7 展开
4个回答
展开全部
1:首先#define EME int;
不对,如果要给int声明一个同义词,使用typedef,正确是:typedef int EME;
2:sStruct没有定义啊,tmain.h中定义的是tStruct,这里写错了。
3:#ifndef __tMAIN_H
#define __tMAIN_H
最主要目的是防止头文件的重复包含和编译。类似if,else的用法。
不对,如果要给int声明一个同义词,使用typedef,正确是:typedef int EME;
2:sStruct没有定义啊,tmain.h中定义的是tStruct,这里写错了。
3:#ifndef __tMAIN_H
#define __tMAIN_H
最主要目的是防止头文件的重复包含和编译。类似if,else的用法。
追问
请问这个#ifndef __tMAIN_H 和我的tmain.h头文件有什么关系吗? 编译器是不是会知道__tMAIN_H就是tmain.h,从而在多个.cpp文件中不重复引用头文件啊!
追答
是的 编译器会知道__tMAIN_H就是tmain.h,这应该是你借助IDE环境自动生成的,编译器一般都会有自己定义宏的方式。
展开全部
#ifndef __tMAIN_H
#define __tMAIN_H
把上面两行交换一下,试试!
#define __tMAIN_H
把上面两行交换一下,试试!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define EME int
这一句后面多了一个分号,删掉。
sStruct b; 这一句应该是 tStruct b;
#ifndef __tMAIN_H
#define __tMAIN_H
是用来防止这个头文件被重复include的。
这一句后面多了一个分号,删掉。
sStruct b; 这一句应该是 tStruct b;
#ifndef __tMAIN_H
#define __tMAIN_H
是用来防止这个头文件被重复include的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
tmain.h头文件
-----------------------------------
#ifndef __tMAIN_H
#define __tMAIN_H
typedef struct sStruct
{
int aa;
long int bb;
unsigned char cc;
}tStruct;
#endif
--------------------------------
主函数 main.c
#include<iostream>
using namespace std;
#define EME int
#include"tmain.h"
void main()
{
EME a=5;
sStruct b;
}
----------------------------------
这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。 C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。
#ifndef x //先测试x是否被宏定义过
#define x
程序段1 //如果x没有被宏定义过,定义x,并编译程序段1
#endif
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。
-----------------------------------
#ifndef __tMAIN_H
#define __tMAIN_H
typedef struct sStruct
{
int aa;
long int bb;
unsigned char cc;
}tStruct;
#endif
--------------------------------
主函数 main.c
#include<iostream>
using namespace std;
#define EME int
#include"tmain.h"
void main()
{
EME a=5;
sStruct b;
}
----------------------------------
这是宏定义的一种,它可以根据是否已经定义了一个变量来进行分支选择,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译。 C语言在对程序进行编译时,会先根据预处理命令进行“预处理”。C语言编译系统包括预处理,编译和链接等部分。
#ifndef x //先测试x是否被宏定义过
#define x
程序段1 //如果x没有被宏定义过,定义x,并编译程序段1
#endif
程序段2 //如果x已经定义过了则编译程序段2的语句,“忽视”程序段1。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询