好友和命名空间
Friends and namespaces
我一直在和朋友一起做实验,遇到了一些我无法解释的事情
如果我将一个类声明为
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);
};
}
我现在无法实例化我的类
MyNamespace::MyClass mc = new MyNamespace::MyClass;
谁能解释为什么会这样?
谢谢
friend int main(int,char**);
在namespace 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;
}
相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- 将好友从模板导出到全局命名空间
- 好友、模板、命名空间
- 好友和命名空间
- 添加命名空间会删除对类私有成员的好友访问权限
- 在命名空间外定义好友模板方法
- 使方法成为嵌套命名空间中的好友