❶ 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開發文編譯報錯文件結構重復是什麼意思
是復制了一份工程還是工程里文件復制多了?工程里搜一下看看報錯的幾個文件是不是能搜到兩個。