2017-01-10 38 views
0

私はプログラムが作成されたときに問題が私のメークファイルのどこかにあると確信しています。私はしばらくそれを周りにつけたが、何か動作するように見えることはできません。以下は私のコード/ makefileです。私はこれをmingw32で作っています。メイクファイルgtkmm; collect2.exe:エラー:ldは1の終了ステータスを返しました

のmakefile:

CXXFLAGS := -std=c++11 -Wall -Werror -g $(shell pkg-config gtkmm-3.0 --cflags) 
LDLIBS = -lpthread $(shell pkg-config gtkmm-3.0 --libs) 

all: test 

test: sample.count 

sample.count: InIT_Printer_Install_Assistant 
    ./InIT_Printer_Install_Assistant 

InIT_Printer_Install_Assistant: main.o win_home.o 
    g++ $(CXXFLAGS) $(LDLIBS) -o [email protected] $^ `pkg-config gtkmm-3.0 --cflags --libs` 

main.o: main.cpp win_home.h 
win_home.o: win_home.cpp win_home.h 

clean: 
    -rm -f *.o *~ 

spotless: clean 
    -rm -f InIT_Printer_Install_Assistant 

main.cppに:

#include <gtkmm.h> 
#include <iostream> 
#include "win_home.h" 

int main(int argc, char *argv[]) 
{ 
    auto app = Gtk::Application::create(argc, argv, "com.InIT.PrinterApp"); 

    HomeGUI win_home; 

    win_home.set_default_size(600,400); 
    win_home.set_title("InIT Self-Service Printer Management"); 

    return app->run(win_home); 
} 

win_home.cpp:

#include "win_home.h" 

HomeGUI::HomeGUI() 
{ 
    //build interface/gui 
    this->buildInterface(); 


    //retrieve printers 

    //create printer Buttons 

    //register Handlers 
    //this->registerHandlers(); 
} 

void HomeGUI::buildInterface() 
{ 
    //combo boxes 
    /* 
    Gtk::HBox combo_rowbox = Gtk::HBox(false, 10); 
    Gtk::ComboBox combobox_department = Gtk::ComboBox(false); 
    Gtk::ComboBox combobox_building = Gtk::ComboBox(false); 
    combo_rowbox.pack_start(child, false, false, padding=0) 
    add(combo_rowbox); 
    */ 
    return; 
} 

win_home.h:

#ifndef GTKMM_INIT_PRINTER_INSTALL_ASSISTANT_H 
#define GTKMM_INIT_PRINTER_INSTALL_ASSISTANT_H 

#include <vector> 
#include <string> 
#include <iostream> 
#include <gtkmm.h> 

class HomeGUI : public Gtk::Window 
{ 
public: 
    HomeGUI(); 
    virtual ~HomeGUI(); 

    void buildInterface(); 
    void registerHandlers(); 
    //void defaultToFloorPlan(); 
protected: 
    //Signal Handlers 

    //Member variables 
    std::string m_selected_department; 
    std::string m_selected_building; 
    std::string m_selected_floor; 

    //Member widgets 
    //std::vector<Gtk::Button> m_printbuttons; 
    //HelpGUI m_win_help; 
    //UninstallGUI m_win_uninstall; 

    //Member logic 
    //ClientLogic logic; 
}; 

#endif 

結果行った後:

C:\ msys32ホームの\ PrintApplication/win_home.cpp \:3:HomeGUI」 C用VTT for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to VTTへの未定義の参照:\ msys32ホームの\ PrintApplication/win_home.cpp \:3:未定義を参照してください。HomeGUI ' のvtable C:¥msys32¥home¥PrintApplication/win_home.cpp:3:未定義参照vtable for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to vtable for HomeGUI' C:¥msys32¥home¥PrintApplication/win_home.cpp:3:未定義参照先`VTT for HomeGUI ' collect2.exe:エラー:ldが1終了ステータスを返しました。 make:*** [Makefile:12:InIT_Printer_Install_Assistant]エラー1

誰が私にこのことが起こっているのかを教えてもらえれば、それは非常に感謝しています。

**注意:私はまだメークファイルを扱っているので、メイクファイルの一般的なフォーマットについては必要に応じて修正してください。

+0

'virtual〜HomeGUI(){};'非純粋仮想関数にはボディが必要です。デストラクタは純粋な仮想であっても、常にボディを持たなければなりません。 (また、 'RegisterHandlers'の本体が必要です)。 – Unimportant

+0

今私は気が気になりません。本当にありがとう!それは働いたように見えます! – TheEggSample

答えて

0

@ Unimportantのコメントがこの問題を解決しました。純粋な仮想関数と非純粋な仮想関数の両方には、すべてボディが必要です。私のwin_home.hを次のように変更しました:

#include "win_home.h" 

HomeGUI::HomeGUI() 
{ 
    //build interface/gui 
    this->buildInterface(); 


    //retrieve printers 

    //create printer Buttons 

    //register Handlers 
    //this->registerHandlers(); 
} 
HomeGUI::~HomeGUI() 
{ 

} 

void HomeGUI::buildInterface() 
{ 
    //combo boxes 
    /* 
    Gtk::HBox combo_rowbox = Gtk::HBox(false, 10); 
    Gtk::ComboBox combobox_department = Gtk::ComboBox(false); 
    Gtk::ComboBox combobox_building = Gtk::ComboBox(false); 
    combo_rowbox.pack_start(child, false, false, padding=0) 
    add(combo_rowbox); 
    */ 
    return; 
} 

void HomeGUI::registerHandlers() 
{ 

} 
関連する問題