C++ 使用来自不同类的对象时出错
福安 Foo.cppC++ 使用来自不同类的对象时出错,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
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"