LINUX.ORG.RU

Берёшь и делишь. Показал бы, какие конкректно строки куда, но в астрале опять идут дожди.

Bfgeshka ★★★★★
()
Ответ на: комментарий от qulinxao

Так ну вот как мне сделать чтобы класс читался в одном файле из другого? Типо в одном Menubar в другом OpenGL (То что отобразить нужно)

JoeCrocker
() автор топика
Ответ на: комментарий от JoeCrocker

класс

Вот таки пишу код на С.

ненененененеене

Dron ★★★★★
()
Ответ на: комментарий от qulinxao

Короче, пишу код на GTK+, нужно в главном файле сделать маленький и красивый код, чтобы не запутаться, и в нём сделать отображение Меню бара, и OpenGL вместе, а то у меня большой код, Меню работает а OpenGL куда то пропал вообще

JoeCrocker
() автор топика
Ответ на: комментарий от JoeCrocker

по кури про области видимости(в частности слово статис что значит когда при обьявлении идентификатора на верхнем уровне(в отличии от внутри функций) у с и как оно линкуется.

а #include чисто текстоподстановка.

qulinxao ★★☆
()
Ответ на: комментарий от JoeCrocker

gl.c


int my_awesome_opengl_func(blabla)
{
   blabla;
}

gl.h


extern int my_awesome_opengl_func(blabla)

menu.c


#include "gl.c" /*можно даже так*/
#include "gl.h" /*но обычно так*/

int may_awesome_menubar(blabla)
{
   blabla;
   my_awesome_opengl_func(blabla);
}

Dron ★★★★★
()

не знаю. но вот сейчас открыл исходники ch341eeprom:
там функции вынесены в отдельный файл .c, а собирается все шлангом вот так clang -o ch341eeprom ch341eeprom.c ch341funcs.c -lusb-1.0

sehellion ★★★★★
()
Ответ на: комментарий от Dron

mntestmain.c

...
#include "mntest.h"
...
mntest();
...
mntest.h
extern int mntest()
Ошибка:
error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token

JoeCrocker
() автор топика
Ответ на: комментарий от JoeCrocker

extern int mmtest(); /* точка с запятой */

Рановато вы за опенгл да с менюбарами взялись, с хелловорлдов обычно начинают.

anonymous
()

Разбиваешь задачи на функции. Функции группируешь по фпйлам так, чтобы в файле были функции отвечающие за какую-то одну подсистему. Объявления выносишь в заголовки. Все что относится к menubar в menubar.c и menubar.h и т.п.

invy ★★★★★
()

Убери аватарку от греха подальше, а то qulinxao посодют.

Свят-свят-свят.

anonymous
()
Ответ на: комментарий от invy
error: ‘vbox’ undeclared (first use in this function)
  gtk_container_add(GTK_CONTAINER(window), vbox);

vbox объявлена во втором .c файле, который include в .h

JoeCrocker
() автор топика
Ответ на: комментарий от JoeCrocker

Компилировать само собой оба файла...

gcc file1.c file2.c file3.c /o:myprogram 

И, да, избавься от глобальных переменных. Их конечно можно объявлять в файле, где ты хочешь их видеть, как extern, но так делать не стоит.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)
Ответ на: комментарий от invy

Ну так и сделал, всё равно ошибки, и ещё появилось:

error: ‘windo’ undeclared (first use in this function)

JoeCrocker
() автор топика
Ответ на: комментарий от JoeCrocker

main.c

#include <stdio.h>
#include "common.h"

  int main(int * argv, char *argc)
  {
	const char str[] = "hello";
	hello(str);

    return 0;
  }
hello.c
#include <stdio.h>

int hello(const char * hello)
{
	printf("%s\n",hello);
	return 0;
}
common.h
extern int hello(const char * str);
run
dron@gnu:~/Рабочий стол/r$ gcc  main.c hello.c 
dron@gnu:~/Рабочий стол/r$ ./a.out 
hello
dron@gnu:~/Рабочий стол/r$ 

Dron ★★★★★
()
Ответ на: комментарий от Dron

У меня GtkWidget *vbox; лежит во втором файле, а в первом есть windo (Окно GTK), подключение сделал через .h и в gcc оба добавил, но ошибка всё равно идёт, что не может найти vbox, а во втором windo

JoeCrocker
() автор топика
Ответ на: комментарий от Dron

Так вот он ошибки выдаёт, не знаю как исправить:

error: ‘windo’ undeclared (first use in this function)
error: ‘vbox’ undeclared (first use in this function)
vbox и windo в разных .c файлах, ну я include то сделал правильно всё, а не находит всё равно

JoeCrocker
() автор топика
Ответ на: комментарий от JoeCrocker

Я ж говорю, избавься от глобальных переменных и передавай их в функции в качестве параметров!

invy ★★★★★
()
Ответ на: комментарий от JoeCrocker

Передавать windo как параметр туда, где вызываешь g_signal_connect.

как-то так:

main.c:

int main() {
  GtkWidget *window;
  // .. create window

  f(window);
  return 0;
}

f.c:

void f(GtkWidget* w) {
  g_signal_connect(G_OBJECT(w), "destroy" ... );
}

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)
Ответ на: комментарий от JoeCrocker

Компилируй с параметром -g -O0 и запускай через nemiver, например. И смотри, почему segfault.

invy ★★★★★
()
Ответ на: комментарий от t1nman

Основная проблема решена, всё разделено, но opengl почему то не хочет работать, есть простой пример компактный пример? Чтобы его можно было сделать в виджет, и задать чёткий размер?

JoeCrocker
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.