標(biāo)題: ERROR L104: MULTIPLE PUBLIC DEFINITIONS不知道哪里錯(cuò)了 求大神幫忙 [打印本頁(yè)]

作者: nibabazaizhe    時(shí)間: 2017-11-28 21:11
標(biāo)題: ERROR L104: MULTIPLE PUBLIC DEFINITIONS不知道哪里錯(cuò)了 求大神幫忙
#include <stc15f2k60s2.h>
#include <intrins.h>
#define LED P2
sbit k1=P1^6;
sbit L1=P4^4;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,
                            0x66,0x6d,0x7d,0x07,
                            0x7f,0x6f,0x77,0x7c,
                            0x39,0x5e,0x79,0x71};
unsigned char a,b;
void Delay100ms()  //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
  do
  {
   while (--k);
  } while (--j);
} while (--i);
}
void Delay100us()  //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
i = 2;
j = 15;
do
{
  while (--j);
} while (--i);
}
              
void main()
{
L1=0;
while(1)
{
  if(k1==0)
  {
   Delay100us();
  }
  if(k1==0)
  {
  
   
    LED=table[a];
    a++;
    Delay100ms();
    if(a==16)
    {
     a=0;
    }
   while((k1==0)&&(b<50))
   {
     Delay100ms();
    b++;
   }
   b=0;
}
}
}

作者: nibabazaizhe    時(shí)間: 2017-11-28 21:12
Rebuild target 'Target 1'
compiling 123.c...
compiling 456.c...
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  TABLE
    MODULE:  .\Objects\456.obj (456)
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  MAIN
    MODULE:  .\Objects\456.obj (456)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?MAIN?456
Program Size: data=11.0 xdata=0 code=167
Target not created.
Build Time Elapsed:  00:00:01
作者: 摟貓睡覺(jué)的魚(yú)    時(shí)間: 2017-11-28 22:05
親測(cè),程序的語(yǔ)法是沒(méi)有問(wèn)題的,你的輸出日志顯示有兩個(gè)C文件建議你看一下項(xiàng)目的建立是否正確。如果可以的話請(qǐng)說(shuō)明一下你使用的編譯環(huán)境
作者: wulin    時(shí)間: 2017-11-28 23:03
nibabazaizhe 發(fā)表于 2017-11-28 21:12
Rebuild target 'Target 1'
compiling 123.c...
compiling 456.c...

可能是你的這個(gè)工程文件里加載有其它無(wú)關(guān)的C文件,我新建一個(gè)工程文件,只把這個(gè)程序內(nèi)容復(fù)制。編譯是正常的。
作者: 999333    時(shí)間: 2017-11-28 23:23
沒(méi)錯(cuò)的話現(xiàn)在編譯的是456.c,你現(xiàn)在把123.c文件刪掉就可以了
作者: nibabazaizhe    時(shí)間: 2017-11-29 06:17
999333 發(fā)表于 2017-11-28 23:23
沒(méi)錯(cuò)的話現(xiàn)在編譯的是456.c,你現(xiàn)在把123.c文件刪掉就可以了

一個(gè)工程中不可以建兩個(gè)嗎  一個(gè)123.c一個(gè)456.c
作者: HC6800-ES-V2.0    時(shí)間: 2017-11-29 09:02
nibabazaizhe 發(fā)表于 2017-11-29 06:17
一個(gè)工程中不可以建兩個(gè)嗎  一個(gè)123.c一個(gè)456.c

一個(gè)工程可以有多個(gè)C文件。
但:只能有一個(gè)main()函數(shù)哦!。。!
作者: liyuanchengx    時(shí)間: 2018-4-28 16:03
c/c++語(yǔ)言中有很多地方要用到extern,但是如果沒(méi)有真正的了解它的意義,會(huì)給編程帶來(lái)很大的麻煩,為了使大家少走彎路,特祥細(xì)的說(shuō)明一下。
      對(duì)于比較小的程序,一般只有一個(gè)c文件和一個(gè)頭文件,全局變量我們通常會(huì)直接定義在c文件中,在程序之前加int i定義。如果要在頭文件中定義有以下兩種方法:用extern來(lái)聲明:extern int i;這一句只是對(duì)變量i進(jìn)行聲明,在c文件的程序之前必須加上int i進(jìn)行定義。extern int i=0;這一句聲明和定義都做了。
    對(duì)于大一點(diǎn)的程序,有很多c文件和頭文件,這個(gè)時(shí)候全局變量就必須在頭文件中聲明(不需要初始化),然后在一個(gè)c文件中定義(該初始化的要初始化)。如果在頭文件中定義,則編譯的時(shí)候會(huì)出現(xiàn)重復(fù)定義的錯(cuò)誤。如果只有頭文件中聲明就會(huì)出現(xiàn)沒(méi)有定義有警告。
   *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
       SYMBOL: K
       MODULE: 222.obj (222)
出現(xiàn)上述錯(cuò)誤則是因?yàn)樽兞縦重復(fù)定義,把你的頭文件中的變量定義前加extern(只是變量聲明不用初始化),再在某一個(gè)你要調(diào)用該變量的c文件的程序之前再定義(注意第一個(gè)調(diào)用的c文件要負(fù)責(zé)附帶初始化該變量,其他調(diào)用的c文件就不需要初始化過(guò)程啦)

作者: ss149748    時(shí)間: 2019-1-4 08:41
liyuanchengx 發(fā)表于 2018-4-28 16:03
c/c++語(yǔ)言中有很多地方要用到extern,但是如果沒(méi)有真正的了解它的意義,會(huì)給編程帶來(lái)很大的麻煩,為了使大 ...

可是在222.c中并沒(méi)有定義變量K還顯示這個(gè)錯(cuò)誤是怎么回事呢




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1