【问题标题】:have classes in separte files access it's other c++让单独文件中的类访问它的其他 c++
【发布时间】:2017-12-06 23:09:18
【问题描述】:

我在 2 个头文件和 2 个 cpp 文件中有 2 个类

#class1.h
#ifndef class1_h
#define class1_h
class myclass;
#endif

#class2.h
#ifndef class2_h
#define class2_h
class anotherclass;
#endif

#class1.cpp

class myclass
{
    anotherclass test1;
}

#class2.cpp

class anotherclass
{
    myclass test2;
}

当然还有一个简单的 main 好吧,我认为这很明显为什么这个东西甚至无法编译 我的问题是如何编译?
必须将类放在不同的文件中..

【问题讨论】:

  • 你在文中提到的第三类是什么?您显示的代码仅包含两个类。
  • 好吧没写好只是告诉我如何让这段代码工作忽略用户定义类型的东西
  • 按照目前的定义,您的类将是无限大的(myclass 实例包含anotherclass 实例,其中包含myclass 实例,其中包含anotherclass 实例,无限......) .你能看出其中的问题吗?解决方案?指针。
  • 与问题没有直接关系,但您可能希望在文件顶部使用“#pragma once”而不是旧的 c 样式 #ifndef #define #endif

标签: c++ file class ms-access


【解决方案1】:

如果类定义(即主体)必须在单独的文件中,则声明类型的成员只能是指针(或引用,但这是不寻常的)。然后,您需要在源文件中实际定义该类的函数返回一个指向该类型实例的指针。

MyClass.h:

#if !defined(MYCLASS_H)
#define MYCLASS_H
class MyClass;
MyClass * CreateMyClass();
#endif

OtherClass.h:

#if !defined(OTHERCLASS_H)
#define OTHERCLASS_H
class OtherClass;
OtherClass * CreateOther();
#endif

myclass.cpp

#include "otherclass.h"
class MyClass
{
OtherClass * ptrOther;
public:
MyClass()
: ptrOther(CreateOther())
{}
};

其他类.cpp:

#include "myclass.h"
class OtherClass
{
MyClass * ptrMyClass;
public:
OtherClass()
: ptrMyClass(CreateMyClass())
{}
};

请注意,以这种方式做事你实际上无法用 ptrOther 或 ptrMyClass 做任何事情((甚至可能无法正确释放它们),将类定义放在标题中并分开成员定义(用于函数和静态),如下所示:

MyClass2.h:

#if !defined(MYCLASS2_H)
#define MYCLASS2_H
#include "OtherClass.h"
class MyClass2
{
OtherClass * ptrOther;
public:
MyClass2();
};
#endif

cMyClass.cpp:

#include "MyClass2.h"
MyClass2::MyClass2()
: ptrOther(CreateOther())
{}

【讨论】:

    【解决方案2】:

    头文件定义类接口。源代码“.cpp”文件用于实现。您的源代码具有实现和类接口。

    【讨论】:

    • (1) 您误解了问题中的代码:.cpp 文件 do 仅包含类定义,而 .h 文件仅包含声明; (2) .cpp 和 .h 可以包含他们想要的任何内容,按照您描述的方式使用它们只是一种约定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多