访问 C++ 中同一命名空间中的成员
Accessing members in same namespace in C++
已解决
很抱歉所有的困惑 - 我将在未来更加努力地提出更好的问题!
我最初的问题基本上是在定义类之前是否可以创建类的实例。
我为此环顾四周,但还没有真正找到解决方案。
基本上,我希望能够做到这一点:namespace a { class first { private: second s; //Throws an error } class second { private: first f; //Seems to work } }
但它不起作用。即使我指定
那么,是否可以a::second
,它也无法识别它们。在命名空间中声明之前访问同一命名空间的成员?如果是这样,如何?
我已经想通了,答案是不,你不能在声明一个类之前创建它的实例,但你可以转发声明该类并创建一个指向它的指针。
您可以使用类的 second 的前向声明并使用指针。只有实现必须知道你的类的声明 其次。
namespace A {
class Second; // Forward declaration
class First
{
public:
First();
~First();
private:
Second* s; // Pointer on a forward class
};
class Second
{
private:
First f;
};
First::~First()
{
delete s;
}
First::First()
{
s = new Second();
}
}
那么,是否可以
在命名空间中声明之前访问同一命名空间的成员? - 不,您使用的所有内容都必须首先声明:
namespace a {
// here you declare class second, but it's an incomplete class
// until it's defined below
class second;
class first
{
private:
// Note that you can't write "second s;"
// because second would have to be a complete class in this case
second* s;
// or you can use a smart pointer like std::shared_ptr<second>
};
class second
{
private:
first f;
};
}
你应该明白,你不能访问a::second,因为它是私有的;默认情况下,当没有命名访问说明符时,类中的所有内容都是私有的。如果要访问类外部的元素,则应将成员设为公共。不要忘记每个类的结尾大括号后面的分号。
相关文章:
- 命名空间 std 没有成员any_of
- 为什么 Clang 在命名空间'std'中没有名为 'copy' 的成员给出错误
- 初始化命名空间中的变量是否类似于将它们初始化为类成员?
- 在 c++ 中使用类的命名空间定义类的成员
- Catalina C++:使用<cmath>标头产生错误:全局命名空间中没有名为 'signbit' 的成员
- 命名空间 Win 没有成员"simpleControl"是什么意思
- Visual Studio 2017:命名空间"System"没有成员"Windows"
- 如何从嵌套在命名空间中的类调用成员函数?
- 成员的结构与命名空间的潜在范围
- 类成员函数在其命名空间之外定义
- Typedef 不是命名空间的成员
- 命名空间 pcl 在点云库中没有名为 PointCloud 的成员
- 将typeID转换为静态成员访问(C )的命名空间
- 无法解析命名空间成员"线程"
- 命名空间:不能在没有对象的情况下调用成员函数
- "uintmax_t":不是"全局命名空间"的成员
- OpenCV CUDA 函数缺失 - 命名空间"cv:cuda"没有成员"resize"
- 错误:"成员"在此上下文中是私有的 - 命名空间
- 从另一个命名空间访问标准命名空间数据成员
- 使用命名空间进行函数成员定义