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
}