我很确定问题出现在我的makefile中,就像我编写程序时一样,标题中的错误指向第12行,即链接器命令。我有一段时间不知所措,但似乎没有任何工作要做。以下是我的代码/ makefile。我是在mingw32做的。
生成文件:
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 $@ $^ `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 \ home \ PrintApplication / win_home.cpp:3:对{Home}的VTT for HomeGUI'
C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to
VTT的未定义引用&#39;
C:\ msys32 \ home \ PrintApplication / win_home.cpp:3:对HomeGUI的vtable for HomeGUI'
C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to
vtable的未定义引用&#39;
C:\ msys32 \ home \ PrintApplication / win_home.cpp:3:对HomeGUI的vtable for HomeGUI'
C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference to
vtable的未定义引用&#39;
C:\ msys32 \ home \ PrintApplication / win_home.cpp:3:未定义引用`VTT for HomeGUI&#39;
collect2.exe:错误:ld返回1退出状态
make:*** [Makefile:12:InIT_Printer_Install_Assistant]错误1
如果有人能够告诉我为什么会这样,那将非常感激。
**注意:正如您所知,我仍然是一个带有makefile的菜鸟,所以当涉及到一般的makefile格式时,请随意根据需要纠正我。
答案 0 :(得分: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()
{
}