Обратите внимание, что я пишу этот тестовый код в одном файле TypeConversion.cpp без файлов заголовков. Я переадресую объявление Counter2 и пытаюсь вызвать на нем метод, который counter2.getA(); который дает мне ошибку времени компиляции, недопустимое использование неполного типа «класс Counter2». Есть ли способ устранить эту ошибку? Есть ли смысл объявления forwrd в файле .cpp или он полезен только в файлах заголовков.передняя декларация cpp недопустимое использование неполного типа
//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;
}
Спасибо за разъяснение !! Что я могу сделать для устранения ошибки в коде, указанном выше? – user2206366
Форвардные объявления могут также использоваться в исходных файлах (но редко используются там). И вы не сможете удерживать объект неполного класса. Для этого вам нужно полное определение, как и для вызова функции-члена. Что вы можете сделать с неполным классом, это указать указатели и ссылки на них. – user2079303
@ user2206366: в вашем случае вы должны определить 'void Counter :: operator = (Counter2 & counter2)' после определения класса 'Counter2'. – Jarod42