Метод класса C ++ возвращает указатель на пользовательский экземпляр класса - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь реализовать класс, который имеет указатели для членов класса и методы, которые возвращают указатели, но при компиляции я получаю «синтаксическая ошибка: отсутствует»; перед «*» и «отсутствующим спецификатором типа - предполагается int. Примечание: C ++ не поддерживает ошибки default-int»

Вот код:
Main.cpp:

#include "AClass.h"
#include "BClass.h"

int main ( int argc, const char* argv[] )
{
    AClass a;
    BClass b;
    return 0;
}

AClass.h:

#ifndef ACLASS_H
#define ACLASS_H

#include "BClass.h"

class AClass
{
public:
    BClass* getB ();
    void setB (BClass* inst);
private:
    BClass* b;
};

#endif

BClass.h:

#ifndef BCLASS_H
#define BCLASS_H

#include "AClass.h"

class BClass
{
public:
    AClass* getA ();
    void setA (AClass* inst);
private:
    AClass* a;
};

#endif

Я даже не выделил классы с помощью файлов cpp и получаю строку ошибок: Неважно, если я создаю файлы C ++ и определяю все, эти ошибки остаются.

1>------ Build started: Project: memberUDFpointers, Configuration: Debug Win32 ------
1>  Main.cpp
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): error C2143: syntax error : missing ';' before '*'
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(9): warning C4183: 'getA': missing return type; assumed to be a member function returning 'int'
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(10): error C2061: syntax error : identifier 'AClass'
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(12): error C2143: syntax error : missing ';' before '*'
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\documents\cpp projects\memberudfpointers\memberudfpointers\bclass.h(12): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Я просмотрел много разных постов повсюду, но все еще чищу голову этим. Кто-нибудь может дать мне подсказку?

1 Ответ

1 голос
/ 15 марта 2012

Ваше определение AClass зависит от определения BClass, а определение BClass зависит от определения AClass. Вы не можете определить одно до того, как другое уже будет определено.

К счастью, реальные классы используют только указатели на другие, поэтому вы можете просто объявить один класс:

class A;

class Bclass { 
    // ...
};

и иди оттуда.

...