Autor Tópico: Erro ao compilar gtkmm-2.4[RESOLVIDO]  (Lida 4694 vezes)

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Erro ao compilar gtkmm-2.4[RESOLVIDO]
« Online: 06 de Maio de 2007, 23:37 »
Pessoal é o seguinte estou começando a aprender gtkmm, só que estou com o seguinte problema para compilar esse codigo,

Código: [Selecionar]
#include <iostream>
#include <gtkmm.h>

int main(int argc, char **argv)
{
Gtk::Main main(argc, argv);
Gtk::Window janela;
Gtk::Main::run(janela);
}

me sai esse erro

Código: [Selecionar]
/~$ g++ teste.cpp -o teste `pkg-config gtkmm-2.4 --cflags --libs`
/usr/lib/gcc/i486-slackware-linux/3.4.6/../../../../i486-slackware-linux/bin/ld: warning: libstdc++.so.5, needed by /usr/lib/gcc/i486-slackware-linux/3.4.6/../../../libgtkmm-2.4.so, may conflict with libstdc++.so.6
root@rocha:~# removepkg cxxlibs-5.0.7-i486-1.tgz


alguem tem ideia do que seja??

***Ai pessoal consegui resolver, instalei a versão mais recente do gcc e do binutils e agora compila, so que tenho outro problema, o que tem de errado nesse codigo???

Código: [Selecionar]
#include <iostream>
#include <gtkmm.h>

using namespace std;

class MyApp : public Gtk::Window
{
public:
MyApp();
virtual ~MyApp();
protected:
Gtk::Button m_button;
virtual void botao_clicado();
};

MyApp::MyApp() : m_button("Clique Aqui")
{
set_title("Hello World");
set_border_width(15);
set_default_size(250, 125);
add(m_button);
m_button.signal_clicked().connect( sigc::slot ( *this, &MyApp::botao_clicado ) );
show_all_children();
}

MyApp::~MyApp()
{
}

void MyApp::botao_clicado()
{
cout <<"Hello World\n";
}

int main(int argc, char **argv)
{
Gtk::Main kit(argc, argv);

MyApp App;
Gtk::Main::run(App);
return 0;
}

Quando compilo sai isso

Código: [Selecionar]
:~$ g++ teste.cpp -o teste `pkg-config --cflags --libs gtkmm-2.4`
teste.cpp: In constructor 'MyApp::MyApp()':
teste.cpp:22: error: missing template arguments before '(' token
« Última modificação: 07 de Maio de 2007, 14:02 por Diego_Rocha »

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Erro ao compilar gtkmm-2.4
« Resposta #1 Online: 07 de Maio de 2007, 14:01 »
Já resolvi o Problema, o erro estava na versão do sigc++, como minha versão é recente a função " se é que pode chamar assim ", sigc::slot, foi trocada por sigc::mem_fun e agora compilou de boa é isso ai t++

m_button.signal_clicked().connect( sigc::mem_fun ( *this, &MyApp::botao_clicado ) );

Darcamo

  • Visitante
Re: Erro ao compilar gtkmm-2.4[RESOLVIDO]
« Resposta #2 Online: 07 de Maio de 2007, 16:12 »
Já programei com a gtkmm e nunca usei sigc::slot.
Na verdade sigc::sloc não é uma função, mas uma classe. Quando você escreveu "sigc::slot ( *this, &MyApp::botao_clicado )" é como se estivesse criando um novo objeto dessa classe chamando o construtor, mas essa classe é um template. Daí a reclamação do compilador.

Você deve usar sigc::mem_fun quando deseja utilizar funções membro de alguma classe como callback, e sigc::ptr_fun quando deseja utilizar funções static ou funções de C como callback. Ambas, sigc::mem_fun e sigc::ptr_fun retornam um sigc::slot que é então passado para a função "connect" que vai conectar esse slot ao sinal.

Ps: aconselho a ler o tutorial da libsigc++ (http://libsigc.sourceforge.net/doc.shtml). Você vê isso na documentação da gtkmm, mas eu achei mais claro ver primeiro o tutorial da libsigc++ (basta até o cap. 2) e só depois ir pra gtkmm. Lembro que fiquei confuso com essa história de mem_fun, slot e ptr_fun quando estava lendo a documentação da gtkmm. Só depois de ler o tutorial da libsigc++ é que tudo ficou claro.

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Erro ao compilar gtkmm-2.4[RESOLVIDO]
« Resposta #3 Online: 07 de Maio de 2007, 18:43 »
Obrigado mais uma vez Darcamo, vc sempre me ajudando e ajudando a todos em C++ valeu, estou iniciando um blog a respeito de Gtkmm, 1° pelo motivo de ter pouco material em portugues e segundo pelo motivo de me dar mais motivação no aprendizado, ao buscar conteudo para colocar no blog vc indiretamente acaba aprendendo mais e fazendo o aprendizado ser mais suave, se voce se interessar em participar sera muito bem-vindo como todos os que quiserem participar, é isso ai obrigado mais uma vez, e t++

Darcamo

  • Visitante
Re: Erro ao compilar gtkmm-2.4[RESOLVIDO]
« Resposta #4 Online: 08 de Maio de 2007, 12:11 »
Com certeza.
Eu estou meio enferrujado na gtkmm, então tentar tirar dúvidas sobre gtkmm é uma boa maneira de relembrar.

Darcamo

  • Visitante
Re: Erro ao compilar gtkmm-2.4[RESOLVIDO]
« Resposta #5 Online: 08 de Maio de 2007, 17:28 »
Nunca usei, mas parece que tem um widget para GTK chamada vte que é exatamente isso: um terminal

Tem também o bind para gtkmm: vtemm
http://vtemm.sourceforge.jp/

Vê é isso que você quer.

Offline Diego_Rocha

  • Usuário Ubuntu
  • *
  • Mensagens: 372
  • Slackware current
    • Ver perfil
Re: Erro ao compilar gtkmm-2.4[RESOLVIDO]
« Resposta #6 Online: 08 de Maio de 2007, 20:03 »
Com certeza.
Eu estou meio enferrujado na gtkmm, então tentar tirar dúvidas sobre gtkmm é uma boa maneira de relembrar.


Como eu faz para utilizar comando Shell linux no Gtkmm.
Pois gostaria aos poucos migrar o Taizan para Gtkmm, pois o C++ é mais rapido que python né.

E tambem conhecer uma linguagem nova, como o C++ misturado com Gtkmm.

Agradeço por qualquer informação obtida. Obrigado !


Só uma duvida jniltinho não me leve a mau, mais ate um tempinho atraz voce tinha acabado de mudar o taizan de shell script para pygtk, junto com o _luks, então te pergunto qual o motivo de mudar novamente de linguagem??  e a respeito de C++ ser mais rapido, acho relativo seu programa não vai ser um consumidor de recursos do pc por isso acho que a diferença de desempenho não vai ser perceptivel; mais se o motivo que te leva a mudar o taizan para C++ é aprendizado, seja bem vindo, eu tambem acabo de entrar nessa aventura;