J'écris un programme de fenêtre GTKmm; la fenêtre principale crée deux boutons, un pour l'anglais et un pour le chinois. L'utilisateur peut cliquer sur le bouton pour faire apparaître une fenêtre différente dans la langue appropriée. Actuellement, j'ai du mal à initialiser le conteneur multi-éléments dans la fenêtre principale. C'est un objet de type MainWindowPane, qui hérite de Gtk :: HBox.référence non définie à `Class :: Class() '
Lorsque je tente de faire, le compilateur émet l'erreur suivante:
$ make
g++ -g `pkg-config gtkmm-2.4 --cflags` -c MainWindow.cpp
g++ -g -o QPI_frontend main.o MainWindow.o StartButton.o `pkg-config gtkmm-2.4 --libs`
MainWindow.o: In function `MainWindow':
/home/dmurvihill/Documents/QPI_frontend/MainWindow.cpp:9: undefined reference to `MainWindowPane::MainWindowPane()'
/home/dmurvihill/Documents/QPI_frontend/MainWindow.cpp:9: undefined reference to `MainWindowPane::MainWindowPane()'
collect2: ld returned 1 exit status
make: *** [QPI_frontend] Error 1
J'utilise la dernière version de gcc avec pkg-config pour inclure les bibliothèques appropriées. Je suis aussi une personne java.
/*
* MAIN_WINDOW.H
* Responsible for creating "slave" RSED windows. Can create English or Chinese
* versions of the demo, and can destroy them all with one click.
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <gtkmm/window.h>
//#include "SlaveWindow.h"
#include "StartButton.h"
#include "MainWindowPane.h"
class MainWindow : public Gtk::Window
{
public:
MainWindow();
private:
MainWindowPane pane;
// std::list<SlaveWindowThread> windows; // Keeps track of all windows that have been created thus far.
void destroyAllWindows(); // Iterates through the linked list and destroys each window.
};
#endif //ifndef MAINWINDOW_H
/*
* MAIN_WINDOW.CPP
*
*/
#include "MainWindow.h"
#include "MainWindowPane.h"
#include "StartButton.h"
MainWindow::MainWindow()// : /*list,*/ pane(/*list*/)
{
pane;
}
void MainWindow::destroyAllWindows()
{
//gtk_widget_destroy(*this);
// TODO: Destroy all the other windows too.
}
/*
* MAIN_WINDOW_PANE.H
*/
#ifndef MAINWINDOWPANE_H
#define MAINWINDOWPANE_H
#include <gtkmm/box.h>
#include <gtkmm/button.h>
//#include "SlaveWindow.h"
#include "StartButton.h"
class MainWindowPane : public Gtk::HBox
{
public:
MainWindowPane(/*&(std::list)*/);
private:
StartButton englishButton; // Used to create a new RSED demo screen.
StartButton chineseButton; // Used to create a new RSED demo in chinese.
// std::list<SlaveWindow> windows; // Keeps track of all windows that have been created thus far.
void destroyAllWindows(); // Iterates through the linked list and destroys each window.
};
#endif //ifndef MAINWINDOWPANE_H
/*
* MAIN_WINDOW.CPP
*
*/
#include "MainWindowPane.h"
#include "StartButton.h"
MainWindowPane::MainWindowPane(/*&(std::list)*/) :
englishButton(StartButton::ENGLISH/*,&(std::list)*/),
chineseButton(StartButton::CHINESE/*,&(std::list)*/)
{
pack_start(englishButton);
englishButton.show();
pack_start(chineseButton);
chineseButton.show();
}
void MainWindow::destroyAllWindows()
{
//gtk_widget_destroy(*this);
// TODO: Destroy all the other windows too.
}
C'est tout. Ajouté la source à mon makefile, et le code compilé avec succès. Merci! Maintenant, sur le débogage d'exécution ... – ILikeFood
@ILikeFood, n'oubliez pas de cocher la case à côté de la réponse qui a fonctionné pour que vous acceptiez la réponse. –
Ahh, merci. J'ai aussi essayé de voter, mais mon compte est trop nouveau. – ILikeFood