【发布时间】:2018-10-19 02:52:19
【问题描述】:
我正在尝试为两个相互依赖的类创建头文件和类文件。我尝试使用#pragma once、extern 类声明,在彼此的标题中声明类。它们似乎都不起作用。这是我的示例代码:
啊.h
#pragma once
#include "B.h"
class A
{
private:
int num;
public:
A();
void printB(B b);
int getA();
~A();
};
A.cpp
#pragma once
#include "stdafx.h"
#include "A.h"
#include <iostream>
A::A()
{
num = 5;
}
void A::printB(B b)
{
std::cout << "b = " << b.getB() << std::endl;
}
int A::getA()
{
return num;
}
A::~A()
{
}
B.h
#pragma once
#include "A.h"
class B
{
private:
char ch;
public:
B();
void printA(A a);
char getB();
~B();
};
B.cpp
#pragma once
#include "stdafx.h"
#include <iostream>
#include "B.h"
B::B()
{
ch = 'g';
}
void B::printA(A a)
{
std::cout << "a = " << a.getA() << std::endl;
}
char B::getB()
{
return ch;
}
B::~B()
{
}
Interedependency.cpp [入口点/主文件]
#pragma once
#include "stdafx.h"
#include "A.h"
int main()
{
A a;
B b;
a.printB(b);
b.printA(a);
return 0;
}
在 Visual Studio 中如何处理这种相互依赖的类?
【问题讨论】:
-
我认为您应该着眼于向前声明一个类,而不是包括标题,例如B类;类 A { ... };然后在 a.cpp 中包含“b.h”
-
这与visual studio无关,这是一个C++问题(甚至不是c++11)。
-
#pragma once仅对 header 有用(不包括 cpp 文件)。
标签: c++ class circular-dependency