C++ 好友和名称空间

C++ 好友和名称空间,c++,C++,我一直在和朋友们做实验,遇到了一些我无法解释的事情 如果我将一个类声明为 class MyClass: public QObject { Q_OBJECT public: friend int main(int,char**); private: MyClass(QObject *parent = 0); }; 然后我可以在main中实例化一个MyClass—— int main(int argc, char *argv[]) { QApplication a(a

我一直在和朋友们做实验,遇到了一些我无法解释的事情

如果我将一个类声明为

 class MyClass: public QObject
 {
  Q_OBJECT

 public:
  friend int main(int,char**);

 private:
  MyClass(QObject *parent = 0);

 };
然后我可以在main中实例化一个MyClass——

int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 MyClass*  = new MyClass;
 raiigui w;
 w.show();
 return a.exec();
}
但是,如果我将MyClass放在名称空间中——

namespace MyNamespace
{
 class MyClass: public QObject
 {
  Q_OBJECT

 public:
  friend int main(int,char**);

 private:
  MyClass(QObject *parent = 0);  
 };
}
我现在无法实例化MyClass

MyNamespace::MyClass mc = new MyNamespace::MyClass;
有人能解释为什么会这样吗

谢谢你的朋友intmain(int,char**)在
名称空间MyNamespace
中声明
main
。要从另一个名称空间声明友元函数,您必须完全指定名称空间,而这又需要向前声明
main

int main(int argc, char *argv[]);

namespace MyNamespace
{
    class MyClass: public QObject
    {
        friend int ::main(int,char**);
        //         ^^^^^^
    private:
        MyClass(QObject *parent = 0);  
    };
}

int main(int argc, char *argv[])
{
     MyNamespace::MyClass* mc = new MyNamespace::MyClass;
}

MyNamespace::MyClass mc=newmynamespace::MyClass中缺少的
*
?是的,还有构造函数调用。应该是
MyNamespace::MyClass*mc=newmynamespace::MyClass()即使缺少*我也会得到一个编译错误,表示main无法访问MyClass@Vinzenz:“以及构造函数调用”-调用构造函数不需要括号。。。瞧,托尼,你说得对。很抱歉,我认为这仅适用于堆和堆栈上的对象:/