麻烦实例化类引用另一个类

时间:2012-03-30 17:50:02

标签: c++ instantiation

我正在尝试实例化几个类,并引用传递给的第一个类。

编译器给出了一个错误说明:错误:'classData'不是类型。

ClassData拥有一些复杂的数据结构,并且拥有一堆访问该数据的访问器。 ClassFunc有许多对该数据进行操作的函数。然后Work类做了很多工作,偶尔需要在ClassB中调用一个函数来对ClassData中的数据进行一些处理。

以下是代码:

/////////////////////////
//ClassData.h
class ClassData {
public:
    ClassData(){
        // initialize a bunch of stuff
    };
    virtual ~ClassData(){};
}

/////////////////////////
//ClassFunc.h
#include "ClassData.h"

class ClassFunc {
public:
    ClassFunc(ClassData& in_classData) : classData(in_classData){};
    virtual ~ClassFunc();

    float updateEta(float deltaVJ, int column);

private:
    ClassData& classData;

};

/////////////////////////
//ClassFunc.cpp
#include "ClassFunc.h"

float ClassFunc::updateEta(float a, int b){
    float foo = 0.0
    // Do a bunch of work to foo
    return foo;

};

/////////////////////////
// Work.h
#include "ClassData.h"
#include "ClassFunc.h"

class Work{

public:
    Work(ClassData& in_class) :  classData(in_class){
        // initialize some stuff
    };
    ~Work(){};

    float updateTheta(int a, float b, float c);

private:
    ClassData& classData;
    ClassFunc classFunc(classData);  //// ERROR IS HERE
}

/////////////////////////
//  Work.cpp
#include "Work.h"
float Work::updateTheta(int a, float b, float c){

    // do some work first
    double foo = classFunc.updateEta(d, e);
    return foo
};

3 个答案:

答案 0 :(得分:1)

你的编译器是对的:classA不是一种类型。 C ++区分大小写; ClassA是您要查找的类型(请查看ClassB构造函数的第一行)。

希望有所帮助!

答案 1 :(得分:0)

在问题修改后回答

ClassFunc classFunc(classData);在类的定义中不是有效的语法。您需要通过set函数或构造函数获得此classFunc变量。

但是,编写一个setter很困难,因为ClassFunc需要ClassData。要解决此问题,您可能还需要修改ClassFunc

此外,还有另一个错误。 ClassDataWork遗漏了一个;在其定义的最后。

问题修改前的原始答案

此代码中存在多个错误。如

float ClassA::funcA{

应该是

float ClassA::funcA(){

另外,它看起来像一个函数定义。

第二,有

ClassB(Class A& in_classA): classA(in_classA){

应该是

ClassB(ClassA& in_classA): classA(in_classA){

由于Class A不是类型。

另外,你缺少几个分号,但这些分号应该很明显。

答案 2 :(得分:0)

问题是你不能在类声明中初始化成员变量:

ClassFunc classFunc(classData);

而是在构造函数的初始化列表中初始化它:

Work(ClassData& in_class) :  classData(in_class), classFunc(classData) {}