找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12461|回复: 8
打印 上一主题 下一主题
收起左侧

ERROR L104: MULTIPLE PUBLIC DEFINITIONS不知道哪里错了 求大神帮忙

[复制链接]
跳转到指定楼层
楼主
ID:253678 发表于 2017-11-28 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}
}
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:253678 发表于 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
回复

使用道具 举报

板凳
ID:90663 发表于 2017-11-28 22:05 | 只看该作者
亲测,程序的语法是没有问题的,你的输出日志显示有两个C文件建议你看一下项目的建立是否正确。如果可以的话请说明一下你使用的编译环境
回复

使用道具 举报

地板
ID:213173 发表于 2017-11-28 23:03 | 只看该作者
nibabazaizhe 发表于 2017-11-28 21:12
Rebuild target 'Target 1'
compiling 123.c...
compiling 456.c...

可能是你的这个工程文件里加载有其它无关的C文件,我新建一个工程文件,只把这个程序内容复制。编译是正常的。

评分

参与人数 1黑币 +5 收起 理由
nibabazaizhe + 5

查看全部评分

回复

使用道具 举报

5#
ID:222948 发表于 2017-11-28 23:23 | 只看该作者
没错的话现在编译的是456.c,你现在把123.c文件删掉就可以了

评分

参与人数 1黑币 +5 收起 理由
nibabazaizhe + 5

查看全部评分

回复

使用道具 举报

6#
ID:253678 发表于 2017-11-29 06:17 | 只看该作者
999333 发表于 2017-11-28 23:23
没错的话现在编译的是456.c,你现在把123.c文件删掉就可以了

一个工程中不可以建两个吗  一个123.c一个456.c
回复

使用道具 举报

7#
ID:164602 发表于 2017-11-29 09:02 | 只看该作者
nibabazaizhe 发表于 2017-11-29 06:17
一个工程中不可以建两个吗  一个123.c一个456.c

一个工程可以有多个C文件。
但:只能有一个main()函数哦!!!!!

评分

参与人数 1黑币 +5 收起 理由
nibabazaizhe + 5

查看全部评分

回复

使用道具 举报

8#
ID:81444 发表于 2018-4-28 16:03 | 只看该作者
c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大家少走弯路,特祥细的说明一下。
      对于比较小的程序,一般只有一个c文件和一个头文件,全局变量我们通常会直接定义在c文件中,在程序之前加int i定义。如果要在头文件中定义有以下两种方法:用extern来声明:extern int i;这一句只是对变量i进行声明,在c文件的程序之前必须加上int i进行定义。extern int i=0;这一句声明和定义都做了。
    对于大一点的程序,有很多c文件和头文件,这个时候全局变量就必须在头文件中声明(不需要初始化),然后在一个c文件中定义(该初始化的要初始化)。如果在头文件中定义,则编译的时候会出现重复定义的错误。如果只有头文件中声明就会出现没有定义有警告。
   *** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
       SYMBOL: K
       MODULE: 222.obj (222)
出现上述错误则是因为变量k重复定义,把你的头文件中的变量定义前加extern(只是变量声明不用初始化),再在某一个你要调用该变量的c文件的程序之前再定义(注意第一个调用的c文件要负责附带初始化该变量,其他调用的c文件就不需要初始化过程啦)
回复

使用道具 举报

9#
ID:431699 发表于 2019-1-4 08:41 | 只看该作者
liyuanchengx 发表于 2018-4-28 16:03
c/c++语言中有很多地方要用到extern,但是如果没有真正的了解它的意义,会给编程带来很大的麻烦,为了使大 ...

可是在222.c中并没有定义变量K还显示这个错误是怎么回事呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表