我是c ++的新手,正在尝试使用两个.hpp文件cpScalar.hpp和cpVector.hpp进行计算。在阅读前向声明说明时,我遇到了困难-我发现所有解决方案都说我不能在完全“声明类”之前使用另一个标头中另一个类的方法,而且我不知道要完全“做什么”声明/定义“该类。
为澄清起见,cpVector依赖于cpScalar,反之亦然-需要循环依赖
我正计划使用cpScalar在cpVector中获取cpScalar的数组,但是由于我未声明,所以无法访问参数输入'cpScalar sarr []',并且我正在使用不完整类型错误。我想知道本节需要做什么。
我不打算在构造函数中使用指针代替向量,因为这会导致灵活的数组问题,(似乎)使用我在课堂上没有学到的'struct'和'malloc'来解决。
下面是我的代码:
// cpVector
#ifndef CPVECTOR_HPP
#define CPVECTOR_HPP
#include <iostream>
#include <vector>
#include "cpScalar.hpp"
using namespace std;
class cpScalar;
class cpVector{
private:
vector<cpScalar> arr; // cpScalar* arr; seems to be more complicated...
unsigned int size;
public:
cpVector(cpScalar sarr[], unsigned int size2){ // this constructor is given
this->size = size2;
arr.resize(size);
for (int i =0; i<size; i++){
arr[i] = sarr[i]; // this gives incomplete type error
}
};
... more public functions...
#endif
#ifndef CPSCALAR_HPP
#define CPSCALAR_HPP
#include <iostream>
#include <string>
#include "cpVector.hpp"
using namespace std;
class cpVector;
class cpScalar{
private:
int intScalar;
double doubScalar;
public:
cpScalar(int num){
intScalar = num;
};
cpScalar(double num){
doubScalar = num;
};
答案 0 :(得分:0)
如果您是C ++的新手,则前向声明可能会使您感到困惑。您需要了解编译器如何读取文件以及如何确定文件之间的链接。
如果这是cpScalar.hpp的全部代码,则无需包含cpVector.hpp。这是因为您没有实例化或使用该文件中的类。 现在,这两个类之间具有循环依赖关系。 cpVector.hpp包含cpScalar.hpp,然后cpScalar.hpp包含cpVector.hpp。编译器是您的朋友,对他/她很轻松。
答案 1 :(得分:0)
为澄清起见,cpVector依赖于cpScalar,反之亦然-需要循环依赖
我没有理由相信这一点。您可能认为需要循环依赖,但不是必需的。考虑一下您如何学习这些概念。您可能在上学之前就已经了解了标量(以计数的形式)。另一方面,矢量往往是基于您对标量的了解(在高中或几年前?)建立的更高级的主题。
程序中的结构可能类似:标量应自行定义,而向量应基于标量。当向量和标量交互时(例如将向量乘以标量),定义应属于更“高级”的类,即cpVector
。不需要循环依赖。