❶ proc编译报错Duplicate symbol "sqlca" in files DataInput.o and DataInterface.o
看ld命令的提示信息,意思是你两个目标文件中有相同的全局变量,所以,报重复定义错误。
使用proc转换的时候,每个.pc文件,都会生成一个类型为sqlca的结构体变量,并且这个变量都是全局变量,你可以打开生成后的C源文件,搜索sqlca结构体看看。proc程序不会因为你多个.pc文件来重新对sqlca结构体变量重命名,这就导致每个源文件里面都有一个相同名字的sqlca结构体全局变量,编译的时候不会报错,链接的时候就会报上面的错误了。
建议是把数据库相关的操作都写在一个文件中,这样就不会产生类似的问题了。嵌入式SQL虽然写起来方便,但是也不是任何项目都适用,它适合结构简单,需要快速开发的项目,你这种如果需要在多个文件中都操作数据库,就会有问题。
❷ 结构体定义在头文件中被重复包含的问题
这样说明,如果定义了头文件A.h,B.h和源文件C.cpp。如果我们在A.h中写上一个函数,在B.h中include A.h,然后再在C.cpp中include A.h和B.h,这样我们就会出现重复包含的问题。
出错分析:错误代码的提示:error C2084: function 'int sub(int,int)' already has a body,这说明sub函数已经存在了一个。因为在B.h中我们通过#include "A.h"导入了A.h的头文件。
而都知道头文件处理简单的来说就是将A.h中文件中的所有的东西全部的复制到#include <A.h>的定义所在的文件处。
(2)编译报错文件结构重复扩展阅读
结构体很重要,初学者一定要掌握。比如存储一个班级学生的信息,肯定包括姓名、学号、性别、年龄、成绩、家庭地址等项。这些项都是具有内在联系的,它们是一个整体,都表示同一个学生的信息。但如果将它们定义成相互独立的变量的话,就无法反映它们的内在联系:
char name[20]; //姓名
int num; //学号
char sex; //性别
int age; //年龄
float score; //成绩
char addr[30]; //家庭住址
而且问题是这样写的话,只是定义了一个学生,如果要定义第二个学生就要再写一遍。这样不仅麻烦,而且很容易混淆。要是能定义一个变量,而且这个变量正好包含这六个项,即将它们合并成一个整体的话就好了。
结构体就是为了解决这个问题而产生的。结构体是将不同类型的数据按照一定的功能需求进行整体封装,封装的数据类型与大小均可以由用户指定。
之前讲的那些基本数据类型只能满足一些基本的要求,只能表示具有单一特性的简单事物。但是对于一些有很多特性的复杂事物,每一个特性就是一个基本类型。这个复杂的事物是由很多基本类型组合在一起而生成的一个比较复杂的类型。这时就需要运用结构体。
❸ c++中多个类继承一个抽象基类并且用多文件结构为何会出现重复定义的错误
解决重定义可以用预编译指令,
在头文件shape.h开头加上
#ifndef _shape_
#define _shape_
在文件末尾#endif
这样 第一次被包含的时候没有定义_shape_所以会把头文件包含进来,以后如果又碰到要包含这个文件的预编译指令发现已经定义了_shape_就是什么都不做
❹ java 编译出现类重复错误
程序没问题,看一下同一个 目录下 是否有 相同的类名
比如:
你是不有 javac *java ,尽量不要这样。比如
有个 A.java 内容
public class A{
}
B.java
class A{
}
public class B{
}
就会有问题 应该 javac A.java,
javac B.java
❺ C语言程序编译报错 redefinition; different basic types
你的part.h里面是不是也有#include "para.h"?
改下para.h试试
#ifndef PARA_H_
#define PARA_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct
{
double box0[3];
double box1[3];
double dt;
int init_step;
int nstep;
} t_para;
void para_read(char *r_name, char *w_name, t_para *para);
#endif
❻ 那个我在修改stm32f10x_conf.h文件时候,编译出错,提示重复定义,不知道是怎么回事啊谢谢了!
stm32f10x.h中已经定义过XXX_TypeDef结构体了啊,你定义重复了。stm32f10x_conf.h是定义项目包含的头文件的
❼ 在头文件中定义一个结构体,两个cpp文件同时包含它,编译时时否会重复
第二个文件如果include了第一个文件,那么第一个文件里面所有的被包含的文件也相当于在第二个文件里面被包含了。所以不用重新包含。
还有,你说那中情况是不会重复的。
一般情况下。文件都是这么写,无论你怎么弄都不会重复了
#ifndef __A_H__//这个宏一般就是你的文件名.变成下划线,前后各加两个下划线
#define __A_H__
你要写的代码的内容
#endif
你这样写 无论你怎么包含这个文件。都不会出现重定义的情况。
❽ 关于C语言结构体重复定义的问题
你所谓的结构体定义只是个声明,编译的时候并不会分配实际空间。只有在用它去定义一个变量的时候才会有具体的空间。类似一个概念,没有实体。所以在不同的文件中包含头文件,链接的时候不会有什么问题。但是你在main.cpp里又声明了一个同样名字的结构,就有冲突了,同一个名字有不同的内容,这个是不允许的。
❾ C语言的重定义错误,求解
重复定义是指编译时同一个定义多次给出或者连接时出现多个外部符号(外部函数和全局变量在不同实现文件中重复定义)。
#ifndef...#pragma once这些指令是用于防止同一个头文件在同一个实现文件中多次包含,这只能解决第一种冲突。
你的问题可能是函数或者全局变量的定义在整个程序中重复了。检查头文件中是否有全局变量定义(没有加extern的就是定义),有的话试试添加关键字static,或者吧定义写在.c文件里。从你的图片上来看,头文件里包含了几个指针变量定义,在这些指针变量定义前面添加关键字extern(如果有初始式去掉初始式)强制将定义改为声明,然后随便在一个实现文件中定义这些指针变量。
将全局变量定义或者函数定义放在头文件里容易导致连接错误,不要写这种代码。。。
像结构体这种语法结构可以在不同实现文件中重复出现。
❿ ios开发文编译报错文件结构重复是什么意思
是复制了一份工程还是工程里文件复制多了?工程里搜一下看看报错的几个文件是不是能搜到两个。