我试图获得一个指向窗口小部件的指针(在代码中它名为 text )。但至少我只有这个
错误:没有匹配函数来调用'std :: basic_ostream :: basic_ostream(wxWindow *)'
我的代码: 的 gui.h
#include <wx/wx.h>
class wxWCK : public wxFrame
{
public:
wxWCK(const wxString& title);
void OnClickCon(wxCommandEvent& event);
void OnClickSta(wxCommandEvent& event);
private:
wxButton *connect;
wxButton *start;
wxTextCtrl *text;
};
const int ID_CON = 100;
const int ID_STA = 101;
const int ID_MF0 = 102;
const int ID_TEX = 103;
void Connect();
void Start();
和 gui.cpp #include“gui.h”
wxWCK::wxWCK(const wxString& title)
: wxFrame(NULL, ID_MF0, title, wxDefaultPosition, wxSize(400,300))
{
wxPanel *panel = new wxPanel(this, -1);
wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL);
wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL);
//Outputwidget
text = new wxTextCtrl(panel, ID_TEX, _T(""),
wxPoint(-1, -1), wxSize(1000, 1000), wxTE_MULTILINE);
//redirecting stream to the outputwidget
//std::ostream stream(text);
stream << "Hello" << std::endl;
connect = new wxButton(panel, ID_CON, _T("Connect"));
start = new wxButton(panel, ID_STA, _T("Start"));
hbox1->Add(text);
hbox2->Add(connect);
hbox2->Add(start);
vbox->Add(hbox1, 1, wxEXPAND);
vbox->Add(hbox2, 0, wxALIGN_LEFT | wxRIGHT | wxBOTTOM, 10);
panel->SetSizer(vbox);
Connect(ID_CON, wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler(wxWCK::OnClickCon));
//Connect(ID_STA, wxEVT_COMMAND_BUTTON_CLICKED,
// wxCommandEventHandler(wxWCK::OnClickSta));
}
void wxWCK::OnClickCon(wxCommandEvent& WXUNUSED(event))
{ void Connect(); }
void wxWCK::OnClickSta(wxCommandEvent& WXUNUSED(event))
{ void Start(); }
void Connect()
{
//Try to get a pointer to 'text'
std::ostream stream(wxWindow::FindWindowById(ID_TEX));
stream << "Connected" << std::endl;
}
/*
void Start()
{
//Try to get a pointer to 'text'
std::ostream stream(wxWindow::FindWindowById(ID_TEX));
stream << "Started" << std::endl;
}
*/
我希望有人可以帮助我。另一种解决方案是将流作为全局。但是当我尝试在标题中获取流声明时,他说他不知道任何文本所以我将文本声明移到课外,我得到了多个声明错误......我想因为我在gui.cpp和main.h中包含了 gui.h 。 -Casisto
编辑: 我将功能更改为:
void Connect()
{
//Try to get a pointer to 'text'
std::ostream stream((wxTextCtrl*) wxWindow::FindWindowById(ID_TEX));
stream << "Connected" << std::endl;
}
现在我没有收到错误或警告,但当我点击“Connect”-Button时,wxTextCtrl没有“输入”(我的意思是,那里只有“Hello”)
答案 0 :(得分:0)
错误消息不适合您显示的代码,其中text
是wxTextCtrl
,派生自std::streambuf
,因此可用于构建关联的{ {1}},而不是std::ostream
。
如果你的代码应该如图所示工作,你必须没有向我们展示一切。
答案 1 :(得分:0)
初始错误必须来自Connect()
的旧代码,因为wxWindow::FindWindowById()
会返回wxWindow*
。
首先要尝试:将wxWCK::OnClickCon()
更改为{ (*text) << "Connected\n"; }
。这应该可行。
接下来,如果你确实需要void Connect()
,请在不创建std::ostream
的情况下再试一次(你真的不需要它);像{ (*(wxTextCtrl*)wxWindow::FindWindowById(ID_TEX)) << "Connected\n"; }
这样的东西。
但是,这可能仍然不起作用,因此请ID_CON = wxID_HIGHEST + 1
,ID_STA = wxID_HIGHEST + 2
等再试一次。 IIRC我已经看到过低值的ID引起好奇行为的案例。