考慮以下兩個方案(只是編輯,以完成整個問題,使其更清晰)向前聲明VS包括
案例1:(犯規編譯爲正確下面提到)
//B.h
#ifndef B_H
#define B_H
#include "B.h"
class A;
class B {
A obj;
public:
void printA_thruB();
};
#endif
//B.cpp
#include "B.h"
#include <iostream>
void B::printA_thruB(){
obj.printA();
}
//A.h;
#ifndef A_H
#define A_H
#include "A.h"
class A {
int a;
public:
A();
void printA();
};
#endif
//A.cpp
#include "A.h"
#include <iostream>
A::A(){
a=10;
}
void A::printA()
{
std::cout<<"A:"<<a<<std::endl;
}
//main.cpp
#include "B.h"
#include<iostream>
using namespace std;
int main()
{
B obj;
obj.printA_thruB();
}
案例2: (唯一的修改......工作沒有編圖誤差)
//B.h
#include "A.h" //Add this line
//class A; //comment out this line
讓我們假設兩個A.cpp和B.cpp得到遵守在一起。以上兩種情況有什麼不同嗎?有沒有理由更喜歡一種方法而不是另一種?
編輯: 那麼,我該如何讓情景1工作。
所以你已經編譯A.cpp和B.cpp在一起,但是你對A.h和B.h做了什麼? – 2010-09-03 03:20:30
@丹尼斯讓你的問題更清晰 – Sii 2010-09-03 04:06:27