Не определен индентификатор
Пишу программу на С++, в которой надо разработать определения двух классов 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
→ Ссылка
- Вам нужно подключать заголовки так, чтобы объявления оказались в нужной области видимости.
- Для избежания циклических включений (как в вашем случае) нужно использовать предварительное объявление.
Переделайте как то так:
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