C++ 声明类以解决无效使用不完整类型错误 尺寸=尺寸2; arr.resize(大小); 对于(int i=0;i

C++ 声明类以解决无效使用不完整类型错误 尺寸=尺寸2; arr.resize(大小); 对于(int i=0;i,c++,C++,为了澄清,cpVector依赖于cpScalar,反之亦然-需要循环依赖 我计划使用cpScalar来获取cpVector中的cpScalar数组,但我无法访问参数输入“cpScalar sarr[]”,因为我没有声明,并且得到了不完整类型错误的无效使用。我想知道我需要为这个部分做些什么 我不打算在构造函数中使用指针来代替向量,因为这会导致灵活的数组问题,而这些问题(似乎)是通过使用“struct”和“malloc”解决的,这是我在课堂上没有学过的 下面是我的代码: // cpVector #i

为了澄清,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;
    };
//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;
,它应该可以工作。我编辑了我的问题-我确实需要循环依赖性,这就是为什么我包括这些