2012-03-30 4 views
0

Я пытаюсь создать несколько классов, ссылаясь на первый класс.Класс создания неполадок со ссылкой на другой класс

Компилятор дает мне сообщение об ошибке: error: '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

Вы пропустили точку с запятой после класса определения. Это ваш код активации? – jrok

+0

ClassB (Class A & in_classA) -> У вас, кажется, есть дополнительное пространство «Класс A» против «ClassA» – Fred

+0

Возможный дубликат [Правильный способ #include при наличии круговой зависимости?] (Http: // stackoverflow .com/questions/3901606/proper-way-to-include-when-there-a-circle-dependency) –

ответ

1

вашего компилятора: classA не является типом. C++ чувствителен к регистру; ClassA - тип, который вы ищете (проверьте первую строку конструктора ClassB).

Надеюсь, что это поможет!

0

Ответ После модификации вопроса

ClassFunc classFunc(classData); не действует синтаксис в определении класса. Вам понадобится переменная classFunc либо с помощью функции set, либо через конструктор.

Однако писать только сеттер будет сложно, потому что для вашего 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 не является типом.

Кроме того, вам не хватает нескольких точек с запятой, но это должно быть очевидно, чтобы определить.

+0

Как я писал выше, это был быстро типизированный пример. Вероятно, в нем есть несколько опечаток. – Noah

+0

Это нормально, основной проблемой было ваше определение для funcA(). Как только это исправлено, остальное - это просто опечатки. – josephthomas

+0

См. Отредактированный вопрос с ** настоящим ** код – Noah

0

Проблема заключается в том, что вы не можете инициализировать переменные-члены в объявлении класса:

ClassFunc classFunc(classData); 

Вместо этого инициализировать его в списке инициализации конструктора:

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

См. Отредактированный вопрос с ** настоящим ** кодом. – Noah

+0

Ошибка с ошибкой: ошибка: неверная инициализация ссылки типа «ClassFunc &» из выражения типа «ClassData» – Noah

Смежные вопросы