Не определен индентификатор

Пишу программу на С++, в которой надо разработать определения двух классов COne и CTwo, которые связаны отношением включения. Проблема возникает в protected класса CTwo (E0020 идентификатор "COne" не определен) и C3646 obj: неизвестный спецификатор переопределения. В чем может быть проблема?

//MAIN
#include <iostream>
#include <string>
#include "COne.h"
#include "CTwo.h"
int main()
{
    COne A("TEST ",1482);
    A.print();
    cout << A.getD() << endl;

    cout << A.getS() << endl;

}


//CONE.H
#ifndef CONE_H
#define CONE_H

#include <iostream>
#include <string>


using namespace std;

class COne
{

    protected:
        string s;
        double d;
        
    public:
        COne();
        COne(string S, double D);
        ~COne();

        COne(const COne& arg);
        
        void print();

        COne(COne& arg);

        const double& getD();
        const string& getS();

        void Print();

        COne& operator=(const COne& arg);

        friend class CTwo;
};
#endif

//CTWO.H
#ifndef CTWO_H
#define CTWO_H

#include <iostream>
#include <string>


using namespace std;

class CTwo
{
    protected:
        string s;
        COne obj;    // < -- - - ТУТ ОШИБКА

    public:
        CTwo(string S, string SOne, double d);



        friend class COne;
};

#endif

Ответы (1 шт):

Автор решения: Sheridan
  1. Вам нужно подключать заголовки так, чтобы объявления оказались в нужной области видимости.
  2. Для избежания циклических включений (как в вашем случае) нужно использовать предварительное объявление.

Переделайте как то так:

CONE.H

#ifndef CONE_H
#define CONE_H

#include <iostream>
#include <string>
#include "CTwo.h"

using namespace std;

class COne
{

    protected:
        string s;
        double d;
        
    public:
        COne();
        COne(string S, double D);
        ~COne();

        COne(const COne& arg);
        
        void print();

        COne(COne& arg);

        const double& getD();
        const string& getS();

        void Print();

        COne& operator=(const COne& arg);

        friend class CTwo;
};
#endif

CTWO.H

#ifndef CTWO_H
#define CTWO_H

#include <iostream>
#include <string>


using namespace std;
class COne;

class CTwo
{
    protected:
        string s;
        COne obj;

    public:
        CTwo(string S, string SOne, double d);



        friend class COne;
};

#endif
→ Ссылка