【发布时间】:2014-05-27 16:19:42
【问题描述】:
我试图获取一个指向小部件的指针(在代码中它被命名为 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;
}
*/
我希望有人可以帮助我。另一种解决方案是将 stream 设为全局。但是当我尝试在标题中获取流声明时,他说他不知道任何 text 所以我将文本声明移到类之外,我得到了一个多重声明错误......我想,因为我在 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;
}
现在我没有收到错误或警告,但是当我单击“连接”按钮时,wxTextCtrl 没有“输入”(我的意思是,那里只有“你好”)
【问题讨论】:
-
std::ostream stream(wxWindow::FindWindowById(ID_TEX));你可能想打电话给 s.th。就像那里的GetText()一样,将它传递给std::ofstream。您不能创建std::ostream的实例,它是一个抽象类。 -
好的,你能说点别的吗?我不知道你想给我什么建议。
-
我可以放在这里的最接近的词:
wxTextCtrl::GetLineText()、std::ofstream,或者您的意思是文档中的wxTextCtrl and C++ Streams 部分? -
我的意思是最后一个,wxtextCtrl 和 C++。
-
您的问题现在与原来的问题没有任何共同之处。您可能应该创建一个新的。