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:“以及构造函数调用”-调用构造函数不需要括号。。。瞧,托尼,你说得对。很抱歉,我认为这仅适用于堆和堆栈上的对象:/