C++ 使用来自不同类的对象时出错

C++ 使用来自不同类的对象时出错,c++,oop,C++,Oop,福安 Foo.cpp class Foo{ private: void printSpecialBar(Bar b);//syntax error: Identifier Bar Bar具有默认构造函数和一个接受两个int的构造函数 语法错误有什么问题?我尝试使用scope Resultion操作符Bar::Bar b,但没有解决它。典型的做法是 #include "Bar.h" void Foo::printSpecialBar(Bar b) { //code goes h

福安

Foo.cpp

class Foo{
private:
    void printSpecialBar(Bar b);//syntax error: Identifier Bar
Bar具有默认构造函数和一个接受两个int的构造函数


语法错误有什么问题?我尝试使用scope Resultion操作符Bar::Bar b,但没有解决它。

典型的做法是

#include "Bar.h"

void Foo::printSpecialBar(Bar b)
{
    //code goes here
}
Foo.h
中,在对
Bar
类的任何引用之前,包括实际类,如

class Bar;

Foo.cpp

中,由于
Foo.h
引用栏,请使用正向声明或
#包含“Bar.h”
Foo.h

中,您必须在
Foo.h
中包含
Bar.h
。除了将其包含在Foo.cpp中之外,还有一个问题:既然您在
Foo
的一个成员函数声明中使用了
Bar
,那么您必须告诉编译器它是什么。否则,编译器认为您做了一个错误。使用
类栏向前声明
Bar
的点之前,code>将为编译器提供足够的信息来编译您的程序。@awesomeyi当然可以包含它,它将解决问题。但是,这里并不严格要求它:转发声明就足够了。@awesomeyi并且在可能的情况下,转发声明总是优先于包含完整的类型定义。生成.h文件链会大大增加编译时间,有时还会导致错误。实际上,这与#pragma one无关。所以任何一个位置都可以。
#include "Bar.h"