我正在尝试实例化几个类,并引用传递给的第一个类。
编译器给出了一个错误说明:错误:'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
};
答案 0 :(得分:1)
你的编译器是对的:classA
不是一种类型。 C ++区分大小写; ClassA
是您要查找的类型(请查看ClassB
构造函数的第一行)。
希望有所帮助!
答案 1 :(得分:0)
在问题修改后回答
ClassFunc classFunc(classData);
在类的定义中不是有效的语法。您需要通过set函数或构造函数获得此classFunc
变量。
但是,编写一个setter很困难,因为ClassFunc
需要ClassData
。要解决此问题,您可能还需要修改ClassFunc
。
此外,还有另一个错误。 ClassData
和Work
遗漏了一个;在其定义的最后。
问题修改前的原始答案
此代码中存在多个错误。如
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) {}