C++ 声明类以解决无效使用不完整类型错误 尺寸=尺寸2; arr.resize(大小); 对于(int i=0;i
为了澄清,cpVector依赖于cpScalar,反之亦然-需要循环依赖 我计划使用cpScalar来获取cpVector中的cpScalar数组,但我无法访问参数输入“cpScalar sarr[]”,因为我没有声明,并且得到了不完整类型错误的无效使用。我想知道我需要为这个部分做些什么 我不打算在构造函数中使用指针来代替向量,因为这会导致灵活的数组问题,而这些问题(似乎)是通过使用“struct”和“malloc”解决的,这是我在课堂上没有学过的 下面是我的代码:C++ 声明类以解决无效使用不完整类型错误 尺寸=尺寸2; arr.resize(大小); 对于(int i=0;i,c++,C++,为了澄清,cpVector依赖于cpScalar,反之亦然-需要循环依赖 我计划使用cpScalar来获取cpVector中的cpScalar数组,但我无法访问参数输入“cpScalar sarr[]”,因为我没有声明,并且得到了不完整类型错误的无效使用。我想知道我需要为这个部分做些什么 我不打算在构造函数中使用指针来代替向量,因为这会导致灵活的数组问题,而这些问题(似乎)是通过使用“struct”和“malloc”解决的,这是我在课堂上没有学过的 下面是我的代码: // cpVector #i
// 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;
};
//cpVector
#ifndef CPU水电站
#定义CPU水电站
#包括
#包括
#包括“cpScalar.hpp”
使用名称空间std;
类cpScalar;
类向量{
私人:
向量arr;//cpScalar*arr;似乎更复杂。。。
无符号整数大小;
公众:
cpVector(cpScalar sarr[],unsigned int size2){//给出了此构造函数
该->尺寸=尺寸2;
arr.resize(大小);
对于(int i=0;i如果C++中是新的,则向前声明可能会混淆您。您需要了解编译器如何读取文件以及如何确定它们之间的链接。
如果这是cpScalar.hpp的全部代码,那么就不需要包含cpVector.hpp,因为您没有在该文件中实例化或使用该类。
现在这两个类之间存在循环依赖关系。cpVector.hpp包括cpScalar.hpp,然后cpScalar.hpp包括cpVector.hpp。编译器是你的朋友,对他/她要宽容
为了澄清,cpVector依赖于cpScalar,反之亦然-需要循环依赖
我看没有理由相信这一点。你可能认为需要循环依赖,但事实并非如此。想想你是如何了解这些概念的。你可能已经了解了标量(以计数的形式)从另一方面来说,向量往往是一门更高级的学科,它建立在你对标量的了解之上(在高中或几年前?)
程序中的结构很可能类似:标量应该可以自己定义,而向量是建立在标量之上的。当向量和标量相互作用时(比如向量乘以标量),定义应该属于更高级的类,即cpVector
。不需要循环依赖项。您不需要转发声明和头include。这意味着错误在于头中的内容。是否有include“cpVector.hpp”
在cpScalar.hpp
中?是的,我有这些。我编辑了我的问题以获得cpScalar。hpp@Kwon由于cpScalar.hpp
不依赖于cpVector.hpp
删除#包括“cpVector.hpp”
从中删除。然后您可以从cpVector.hpp
中删除类cpScalar;
,它应该可以工作。我编辑了我的问题-我确实需要循环依赖性,这就是为什么我包括这些