我想用两个不同的.hpp文件中的两个类来创建操作重载的代码 . 但是我有这些错误.....为什么我不能在另一个类文件中使用cpVector另一个obj?什么时候类型的不完整定义发生?

./cpScalar.hpp:30:19:错误:类型'const cpVector'的定义不完整(int i = 0; isize,i){^ ~~~~~~

这是一个类代码 .

#ifndef CPVECTOR_H
#define CPVECTOR_H

#include <iostream>
 using namespace std;

class cpScalar;
class cpVector{
private:
unsigned int size;
cpScalar* sarr;
public:
cpVector(cpScalar* sarr,int size);
friend ostream & operstor << (ostream &out,const cpVector& res);
friend cpVector operator + (const cpVector& another);
friend cpVector operator + (const cpScalar& another);
friend cpVector operator - (const cpVector& another);
friend cpVector operator - (const cpScalar& another);
friend cpScalar& operator * (const cpVector& another);
friend cpVector operator * (const cpScalar& another);
friend cpVector operator / (cpVector another);
friend cpVector operator / (const cpScalar& another);
};

#include "cpScalar.hpp"
cpVector ::cpVector(int size,cpScalar arr[]){
    sarr = new cpScalar[size];
    for(int i=0;i<size;i++){
        sarr[i]=arr[i];
    }
}
cpVector cpVector:: operator + (const cpVector& another){
    for(int i=0;i<size;i++){
    sarr[i]= sarr[i]+another->sarr[i]
    }
    return this;
}
cpVector cpVector:: operator + (const cpScalar& another){
    for(int i=0;i<this->size;i++){
        sarr[i]=sarr[i]+another->num;
    }
    return this;
}
cpVector cpVector:: operator - (const cpVector& another){
   for(int=0;i<size;i++){
       sarr[i]=sarr[i]-another->num;
   }
   return this;
}
cpVector cpVector:: operator - (const cpScalar& another){
    for(int i=0;i<size;i++){
        sarr[i]=sarr[i]-another->num;
    }
    return this;
}
cpScalar& cpVector ::operator * (const cpVector& another){
    cpScalar res = new cpScalar;
    res->num=0;
    for(int i=0;i<size;i++){
        res->num=res->num+(sarr[i]*another->sarr[i]);
    }
    return res;
}
cpVector cpVector:: operator * (const cpScalar& another){
   for(int i=0;i<size;i++){
       sarr[i]=(sarr[i])*(another->num);
   }
   return this;
}
cpVector cpVector:: operator / (const cpVector& another){
    for(int i=0;i<size;i++){
        sarr[i]=(sarr[i])/(another->sarr[i]);
    }
    return this;
}
cpVector cpVector:: operator / (const cpScalar& another){
    for(int i=0;i<size;i++){
        sarr[i]=(sarr[i])/another->num;
    }
    return this;
}
ostream & operator << (ostream &out, const cpVector &res){
  cout<<"[";
  for(int i=0;i<res->size;i++){
    cout<<res->sarr[i];
    if(i<res->size-1){
      cout<<",";
    }
  }
  cout<<"]"
  return cout;
}
#endif

这是我第一次在cpp中尝试两个不同的类 . 我不知道从哪里开始......