当gchar初始化程序得到安宁错误 [英] program givin error when gchar is initialized

查看:103
本文介绍了当gchar初始化程序得到安宁错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的 main.h (包括在其他所有的src文件),我有:

in my main.h (which is included in all other src file), I have:

char* buffer;

这编译和workes罚款。

This compiles and workes fine.

有关其他一些原因,我试图初始化缓存,无论是作为

For some other reason, I tried to initialize buffer, both as

char* buffer="";

char* buffer="\0";

现在,建设它给错误:

src/search.o:(.data+0x0): multiple definition of `buffer'
src/bib.o:(.data+0x0): first defined here
src/mkbib.o:(.data+0x0): multiple definition of `buffer'
src/bib.o:(.data+0x0): first defined here
src/update_file.o:(.data+0x0): multiple definition of `buffer'
src/bib.o:(.data+0x0): first defined here
src/view.o:(.data+0x0): multiple definition of `buffer'
src/bib.o:(.data+0x0): first defined here
src/file_util.o:(.data+0x0): multiple definition of `buffer'
src/bib.o:(.data+0x0): first defined here
collect2: error: ld returned 1 exit status
make[2]: *** [mkbib] Error 1

问题是bib.o从野牛文件生成(野牛-d )。缓冲区的的定义有:

The problem is bib.o is generated from a bison file (bison -d). buffer is NOT defined there:

$ grep buffer src/bib.y
$ 

缓冲区也从来不定义任何其他地方,但使用的:

buffer is also never defined ANYWHERE else, but used:

$grep buffer src/*.c
src/file_util.c:  44   :  g_file_set_contents(filename, buffer, -1, &Err);
src/file_util.c:  51   ://  g_free(buffer);
src/file_util.c:  75   :    g_file_set_contents(filename, buffer, -1, &Err);
src/file_util.c:  76   ://    g_free(buffer);
src/file_util.c: 140   :    g_file_get_contents(filename, &buffer, &length , &error);
src/file_util.c: 152   ://    g_free(buffer);
src/search.c:  99      :  GtkTextBuffer *gs_buf=gtk_text_view_get_buffer(GTK_TEXT_VIEW(gs_txt));
src/search.c: 100      :  gtk_text_buffer_get_start_iter (gs_buf, &start);
src/search.c: 101      :  gtk_text_buffer_get_end_iter (gs_buf, &end);
src/search.c: 102      :  gchar *gs_text = gtk_text_buffer_get_text (gs_buf, &start, &end, FALSE);
src/search.c: 103      :  strcat(buffer, gs_text);
src/update_file.c: 106 :    GString *str=g_string_new(buffer);
src/update_file.c: 132 :    buffer=str->str;
src/view.c:  38:  yyin=fmemopen(buffer,strlen(buffer),"r");
src/view.c: 178:  //  g_free(buffer);
src/view.c: 259:  buffer=str->str;
$

注:我还记得有相同类型的错误将在main.h几天另一个字符变量回来,留下的问题是时间

NB: I can also recall having same type of error adding another character variable in main.h few days back, left the problem that time.

推荐答案

使用:

extern char *buffer;  // declares buffer, but doesn't define it

main.h

,并确保你的缓冲的定义只出现在一个曾经 .C 文件为:

and be sure your definition of buffer appears only once in one .c file as:

char *buffer = "";  // not equivalent to = "\0"

这篇关于当gchar初始化程序得到安宁错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆