C语言 变量重定义
重复定义是指编译时同一个定义多次给出或者连接时出现多个外部符号(外部函数和全局变量在不同实现文件中重复定义)。
#ifndef...#pragma once这些指令是用于防止同一个头文件在同一个实现文件中多次包含,这只能解决第一种冲突。
你的问题可能是函数或者全局变量的定义在整个程序中重复了。检查头文件中是否有全局变量定义(没有加extern的就是定义),有的话试试添加关键字static,或者吧定义写在.c文件里。从你的图片上来看,头文件里包含了几个指针变量定义,在这些指针变量定义前面添加关键字extern(如果有初始式去掉初始式)强制将定义改为声明,然后随便在一个实现文件中定义这些指针变量。
将全局变量定义或者函数定义放在头文件里容易导致连接错误,不要写这种代码。。。
像结构体这种语法结构可以在不同实现文件中重复出现。
extern 用于声明外部变量,扩展外部变量在程序文件中的作用域,例如,在别的文件(或者外部量变)中有如下声明:
int a;则可以在另一个文件(或者别的函数)中使用,extern int a;表示a这个变量也在本文件(或者本函数)中可用,但如果,在同一个文件(或者同一个函数)中同时声明:
extern int a;
int a;
就会报错了,编译器会告诉你重定义了,所以extern int a;和 int a;不能在同一个文件,或者同一个函数中声明,明白了吗?
#include<stdio.h>
#include<stdlib.h>
struct date {
int year;
int month;
int day;
};
struct student {
long int no;
char name[20];
struct date birthday;
unsigned sex;
float score;
};
struct student mstd[3] = {//std是C++的命名空间名称,这里改为mstd。要说明的是,假如你使用标准C编译环境就没有命名冲突了,若使用C++环境则会报错。
{2013160123,"ZHANG San",1997,7,21,0,90.00},{2013160124,"LI Si",1998,8,21,1,92.00},
{2013160125,"WANG Wu",1999,2,21,0,93.00}
};
int main() {
int i;
long no;
printf("please input no:
");
scanf("%ld",&no);
for (i = 0;i < 3;i++)
if (no == mstd[i].no) {
printf("nonameyearmonthdatsexscore
");
printf("%ld%s%d%d%d%u%.2f", mstd[i].no, mstd[i].name, mstd[i].birthday.year, mstd[i].birthday.month, mstd[i].birthday.day, mstd[i].sex, mstd[i].score);
break;
}
if (i == 3) printf("error!");
getchar();
getchar();
return 0;
}
C语言 变量重定义
include<stdio.h>#include<stdlib.h>struct date {int year;int month;int day;};struct student {long int no;char name[20];struct date birthday;unsigned sex;float score;};struct student mstd[3] = {\/\/std是C++的命名空间名称,这里改为mstd。要说明的是,假如你使用标准C编译环境就没有...
C语言的重定义错误,求解
重复定义是指编译时同一个定义多次给出或者连接时出现多个外部符号(外部函数和全局变量在不同实现文件中重复定义)。ifndef...#pragma once这些指令是用于防止同一个头文件在同一个实现文件中多次包含,这只能解决第一种冲突。你的问题可能是函数或者全局变量的定义在整个程序中重复了。检查头文件中是否有...
c语言中怎么避免重定义?
1、在编译代码时如果出现以下错误提醒说明已经犯错了。错误类型:error:LNK2005 。2、打开程序代码可以看到在ini.h头文件中定义了如下全局变量。3、在其他代码文件(如Main.cpp)中再次引用ini.h头文件时就会再次定义ini.h中的那些全局变量。这样就造成了变量的重复定义。4、在头文件的首行输入如下命令:...
c语言中报错:重定义,不同的基类型。求解释~
请写上函数的声明 放在宏定义之后 main函数之前 如:include<stdio.h> include<string.h> define STUDENT 5 define SUBJECT 3 void get_list(char*a,int*b);void print_list();等等 main(){ }
我弄的这个VBS代码提示我让重定义 我应该哪里改一下
定义变量重复了,第一句取消错误提示的,第二句和第三句定义变量的,找找下面与这几句重复的删去就可以了,以下是我作的修改:望采纳。
...i=0;……;……){} C语言中,这两个i算不算重定义啊?
首先,老兄你的i的确是重定义了,注意在for(int i=0; ...)中声明的i作用范围不在for语句从属的括号内,而是在for本身所在的块内。也就是说,写在for(int i=0;...)中的i与直接在这里写一个int i 对于定义i来说是完全等效的。至于你的第二个问题,你应该把完整的代码片断拷贝到这里。从你...
"log":重定义;以前的定义是"数据变量"
{ int a;int b;}STU;这个结构体定义,因此会出现重定义错误,要避免这种情况需要使用条件编译处理如下 struct.h 这个头文件就应该这样写 ifndef FUN_H\/\/这个FUN_H是随便写,但建议有意义也不能和别的头文件相同。define FUN_H typedet struct student { int a;int b;}STU;endif fun1.h 这个...
易语言的重定义数组按键里怎么解决
本命令可以重新定义指定数组的维数及各维的上限值。本命令为初级命令。命令参数表中最后一个参数可以被重复添加。参数<1>的名称为“欲重定义的数组变量”,类型为“通用型(all)”,提供参数数据时只能提供变量数组。参数<2>的名称为“是否保留以前的内容”,类型为“逻辑型(bool)”,初始值为“假...
vs2017中LNK2005错误,包含函数重定义和变量的重定义,大家看看
h中,全局变量放在.cpp中,在.h中只放extern变量声明,#pragma once是include保护,它应该内置保护(就是放到.h文件的头部)等等。而现在你的程序出现了连接错误,一般就是因为有一个符号没有定义而你使用了,或者一个符号你定义了几次(符号是编译原理术语,类名、函数名、变量名等都是符号)
already used在C语言中什么意思
变量已使用的错误提示是重定义;already used 一般出现在switch case语句中。如果switch case 的时候如果写两个及以上” case n:“,他就会提示“n” already used。其中的“n”,可能是一个表达式,编译程序会自动计算它的值。