C++ C++;超载<&书信电报;错误
我希望能得到一些帮助,我得到了一个错误-我已经搜索了类似的问题,没有真正给我什么,我在追求。下面列出了一个代码段:C++ C++;超载<&书信电报;错误,c++,operator-overloading,ostream,C++,Operator Overloading,Ostream,我希望能得到一些帮助,我得到了一个错误-我已经搜索了类似的问题,没有真正给我什么,我在追求。下面列出了一个代码段: class NewSelectionDlg : public CDialog { // Construction public: class CProductListBox { public: friend ostream& operator <<(ostream& o, const CProductListBox& b
class NewSelectionDlg : public CDialog
{
// Construction
public:
class CProductListBox
{
public:
friend ostream& operator <<(ostream& o, const CProductListBox& b);
};
ostream& operator<<(ostream& o, const CProductListBox& b)
{
std::cout << o.m_lstEclispeProducts;
return o;
}
class新闻选择dlg:public对话
{
//建筑
公众:
类列表框
{
公众:
friend ostream&operator声明友谊时,只需在类定义之外或在子类中定义它:
class NewSelectionDlg : public CDialog
{
// Construction
public:
class CProductListBox
{
public:
friend ostream& operator <<(ostream& o, const CProductListBox& b);
};
// (...) Rest of NewSelectionDlg
};
ostream& operator <<(ostream& o, const NewSelectionDlg::CProductListBox& b)
{
// Did you meant:
return o << b.m_lstEclispeProducts;
}
class新闻选择dlg:public对话
{
//建筑
公众:
类列表框
{
公众:
friend ostream&operator您还应该定义重载的操作符操作符,它应该是b
而不是中的o
,我使用了您的第二个解决方案
class NewSelectionDlg : public CDialog
{
// Construction
public:
class CProductListBox
{
public:
friend ostream& operator <<(ostream& o, const CProductListBox& b)
{
return o << b.m_lstEclispeProducts;
}
};
使用声明时:
朋友void foo()
您所做的是在封闭的命名空间范围中声明一个函数
namespace name {
struct outer {
struct inner {
friend void foo(); // declares name::foo
};
};
void foo() {} // defines it
}
运营商也是如此。非常感谢所有的建议,伙计们-我会处理这些建议,并让你们知道结果。嗨,帕维尔-谢谢你们的帮助-如果你们能帮忙,我发布了另一个查询-谢谢。这是因为你们m u lstEclispeProducts
它是NewSelectionDlg
的成员,而不是NewSelectionDlg::CProdUCTListBox < /代码>。您如何使用此代码?考虑将变量添加到<代码> NeXOPTIONDLG::CuffTistListBox < /C> >从要打印的对象中存储<代码> MyListCsLePyPux<代码>。堆栈溢出不是一个论坛,而是一个稍微不同的工具。尝试建立基于答案的讨论不是一个好主意,因为答案是重新排序。在每个页面重新加载ED。如果你想给一个答案写一个评论,只需使用注释框。在这个特定的情况下,你可能应该创建一个不同的问题,因为现在的问题与原来的问题无关。我明白,对于一个开始的人来说,这可能不是显而易见的:现在,在你的特定问题上,C++内部的CLASE。s没有访问外部类的权限,因此如果您想访问外部类成员,您应该在外部类级别提供该功能。感谢David——刚刚加入论坛的人——将为将来做好准备。Pawel——我相信我可能不得不稍微改变一下——CPProductListBox-//CPProductListBox有一个单独的头文件类CProductListBox:public CListBox{DECLARE_DYNAMIC(CProductListBox)public:CProductListBox();virtual~CProductListBox();protected:DECLARE_MESSAGE_MAP()public:virtual void DrawItem(LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT);virtual void MeasureItem(LPMEASUREITEMSTRUCT lpmeasteItemStruct);};是否最好添加重载
std::cout << o.m_lstEclispeProducts;
class NewSelectionDlg : public CDialog
{
// Construction
public:
class CProductListBox
{
public:
friend ostream& operator <<(ostream& o, const CProductListBox& b)
{
return o << b.m_lstEclispeProducts;
}
};
// Dialog Data
//{{AFX_DATA(NewSelectionDlg)
enum { IDD = IDD_NEW_SELECTION };
CButton m_btnMessageBoard;
CButton m_btnMoreInfo;
CComboBox m_cmbOpenDocuments;
CButton m_btnOk;
CButton m_btnStateApprovals;
CComboBox m_cmbProductType;
/// CListBox m_lstSalesConcepts;
CButton m_chkObjectiveWizard;
**CProductListBox m_lstEclipseProducts;**
namespace name {
struct outer {
struct inner {
friend void foo(); // declares name::foo
};
};
void foo() {} // defines it
}