访问仅在父级的 cpp 文件中的类
Access to class which is only in cpp file of parent
我想调用一个只在父源类文件的文件中的类。实际上,我在 3 个文件中有 4 个类:
parent.h
parent.cpp
child.h
child.cpp
"主要"类是Child
和Parent
。类Otherclass
位于 Parent
类定义上方的 parent.h 文件中。
如何访问仅在父.cpp文件中的类Otherclass
在子文件中.cpp?
(不幸的是,我不允许对父文件进行重大更改。
家长.cpp:
using ParentNamespace::Parent;
namespace other
{
class Otherclass
{
public:
Otherclass()
{
// do something
}
~Otherclass()
{
}
};
}
Parent::Parent()...
...
// here the Parent class continues normal
儿童.cpp:
#include "parent.h"
Child::Child() :
ParentNamespace::Parent()
...
...
...
// here I want to use Otherclass
我怎样才能获得仅在父文件中的类"其他类".cpp.cpp
的访问?
你不能。这就是头文件的全部用途。使用它们。
(不幸的是,我不允许在父文件中进行重大更改。
要么现有代码完全损坏,您应该使用此事实来允许...
或者这些是你不应该尝试以这种方式使用的内部类。
您可以随时为 OtherClass
创建一个单独的头文件,将OtherClass
定义(您通常会输出到标头中的所有代码,而不是非内联函数的代码)复制到那里并将此标头#include
到 child.h
中。对同一类有多个定义并不是很糟糕,只要您绝对确定它们是相同的。这也是一种正确的方法,但是如果您无法将OtherClass
定义移动到(某些)头文件,则可以将其复制到新的头文件中。
当然,要问的第一个问题是为什么所有现有代码都是以这种方式完成的。也许OtherClass
只是Parent
的实现细节,这些细节可能会在未来的开发中发生变化,并且您不应该使用。
一个示例代码(不完全适合您的情况,但说明了如何在没有任何头文件的情况下工作):
// a.cpp
#include <iostream>
class A{
public:
int x;
A(int);
};
class B {
public:
int y;
B(int);
};
A::A(int v) {
std::cout << "A::A " << v << std::endl;
}
// b.cpp
#include <iostream>
class A{
public:
int x;
A(int);
};
class B {
public:
int y;
B(int);
};
B::B(int v) {
std::cout << "B::B " << v << std::endl;
A a(v+10);
}
// main.cpp
class A{
public:
int x;
A(int);
};
class B {
public:
int y;
B(int);
};
int main() {
A a(10);
B b(20);
}
按预期构建和工作。但是,保持所有定义相同确实很困难,因此这就是标头的用途。
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何在cpp文件之间切换窗口?在Qt中
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- C++ 链接到单独的.cpp文件说"multiple definitions"
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- 包含在.cpp文件中包含在 .h 文件时包含
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 如何使用线程类编译 cpp 文件?
- 使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++
- 我应该将外部标头放在 .h 文件还是.cpp文件中?
- 从另一个 cpp 文件更改结构内、映射键内的变量