我非常确定问题出在makefile中的某个地方,因为当我编写程序时,标题中的错误将我指向第12行,即链接器命令。我花了一段时间来修补它,但似乎什么都不能用。以下是我的代码/makefile。我正在用mingw32做这个。
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 $@ $^ `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_Assistantmain.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:对VTT for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference toVTT的未定义引用HomeGUI‘C:\msys32\home\PrintApplication/win_home.cpp:3:对vtable for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference tovtable的未定义引用HomeGUI’VTT for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference tovtable未定义引用HomeGUI‘C:\msys32\home\PrintApplication/win_home.cpp:3:对vtable for HomeGUI' C:\msys32\home\PrintApplication/win_home.cpp:3: undefined reference tovtable未定义引用’HomeGUI‘集合VTT未定义引用: error: ld returned 1退出状态make:* Makefile:12: InIT_Printer_Install_Assistant错误1
如果有人能告诉我为什么会发生这样的事情,我将不胜感激。
**注意:如你所知,我仍然是makefile的新手,所以当涉及到一般的makefile格式时,请随时纠正我的错误。
发布于 2017-01-11 06:38:05
@不重要的评论解决了这个问题。纯虚函数和非纯虚函数都必须有一个主体。将我的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()
{
}https://stackoverflow.com/questions/41579419
复制相似问题