C++ 转发声明cpp使用不完整类型无效

C++ 转发声明cpp使用不完整类型无效,c++,forward-declaration,C++,Forward Declaration,请注意,我在一个没有头文件的TypeConversion.cpp文件中编写此测试代码,我正向声明Counter2并尝试调用Counter2.getA()上的方法;这给了我编译时错误,不完整类型“class Counter2”的使用无效有解决此错误的方法吗? 在.cpp文件中是否有forwrd声明的含义,或者它仅在头文件中有用 //TypeConversion.cpp #include <iostream> using namespace std; class Counter2; c

请注意,我在一个没有头文件的TypeConversion.cpp文件中编写此测试代码,我正向声明Counter2并尝试调用Counter2.getA()上的方法;这给了我编译时错误,不完整类型“class Counter2”的使用无效有解决此错误的方法吗? 在.cpp文件中是否有forwrd声明的含义,或者它仅在头文件中有用

//TypeConversion.cpp
#include <iostream>
using namespace std;
class Counter2;

class Counter {

public:
int count;


public :
const int* getCount() const{return &(this->count);}

void setCount() {

    this->count=10;

}

// Pre-increment
Counter operator++() {
    this->count++;

    return (*this);
}
//Post increment
Counter& operator++(int){
    Counter dummy;
    dummy.count=this->count;//(*this).n
    this->count++;
    return dummy;
}

 const Counter& modify() {
    this->count=111;
    return *this;
}

Counter()  {
    this->count=0;
    //this->array[5]={1,1,2,3,4};
}

/*Counter(Counter2 &counter2) {
    this->count= counter2.getA() + counter2.getB();
}*/

istream& operator>>(istream& in) {

    in>>this->count;
    return in;
}

void operator=(Counter2 &counter2) {
    this->count = counter2.getA() + counter2.getB();
}

/*  int& operator[](int index){
    return this->array[index];
}*/

};

class Counter2 {
private:
int a ,b;
public:
Counter2() {
    this->a=10;
    this->b=20;
}
Counter2(Counter &c) {
    this->a=c.count;
    this->b=c.count;
}

int getA()  {return this->a;}
int getB()  {return this->b;}

operator Counter() {
    Counter c;
    return c;
}

};

int main() {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
Counter2 c2;
Counter c=c2;
//c=c2;
cout<<endl<<*(c.getCount());
return 0;
}
//TypeConversion.cpp
#包括
使用名称空间std;
第2类;
班级计数器{
公众:
整数计数;
公众:
常量int*getCount()常量{return&(this->count);}
void setCount(){
这个->计数=10;
}
//增量前
计数器运算符++(){
这->计数++;
返回(*本条);
}
//增量后
计数器和运算符++(int){
反假人;
dummy.count=this->count;/(*this).n
这->计数++;
返回假人;
}
常量计数器&修改(){
这个->计数=111;
归还*这个;
}
计数器(){
此->计数=0;
//这->数组[5]={1,1,2,3,4};
}
/*计数器(计数器2和计数器2){
这->计数=计数器2.getA()+计数器2.getB();
}*/
istream和operator>>(istream和in){
在>>这个->计数;
返回;
}
无效运算符=(计数器2和计数器2){
这->计数=计数器2.getA()+计数器2.getB();
}
/*整型运算符[](整型索引){
返回此->数组[索引];
}*/
};
2级柜台{
私人:
INTA,b;
公众:
计数器2(){
这个->a=10;
这个->b=20;
}
柜台2(柜台和c){
这->a=c计数;
这->b=c计数;
}
int getA(){返回this->a;}
int getB(){返回此->b;}
操作员计数器(){
计数器c;
返回c;
}
};
int main(){

cout在头文件中使用前向声明,例如,能够保存类的对象。但是一旦您想要访问此类的方法或成员(在.cpp中)您必须在定义中包含正确的标题。

谢谢您的解释!!如何解决上面指定的代码中的错误?转发声明也可以在源文件中使用(但在那里很少有用)。您将无法保存不完整类的对象。您需要完整的定义,就像调用成员函数一样。对于不完整类,您可以做的是声明指针和对它们的引用。@user2206366:在您的情况下,您必须定义
void Counter::operator=(Counter2&Counter2)
在类
计数器2
的定义之后。@Jarod42您能提供一个例子吗?@trusktr:Like。