Определения классов C ++ внутри заголовочных файлов - PullRequest
1 голос
/ 19 марта 2012

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

//classOne.h
class classOne{
    public:
        classOne();
        ~classOne();
        class classInsideClass{
            public:
                classInsideClass
                void hello();
                void print();
        };

}

(в этом примере я пропустил некоторый код, например конструктор для classOne)

//classOne.cpp
classOne::classInsideClass::classInsideClass(){}
classOne::classInsideClass::hello(){
    cout << ""Hello <<endl;
}

//main.cpp
classOne callingClass;
callingClass.classInsideClass.hello;

Я определил класс в заголовочном файле classOne. И я создал функции для этого classInsideClass, внутри cpp классаOne. Это правильный способ сказать, что classInsideClass принадлежит classOne, или мне не разрешено это делать?

Правильно ли я вызываю функции classInsideClass в main.cpp? Когда я пытаюсь запустить это, я получаю следующую ошибку:

ошибка: недопустимое использование 'class classOne :: classInsideClass

Если я не попытаюсь вызвать функцию classInsideClass в main.cpp, это будет нормально.

Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 19 марта 2012

classInsideClass - это тип внутри classOne, а не объект. Если вы хотите позвонить classInsideClass::hello(), вам нужен фактический экземпляр из classInsideClass:

classOne::classInsideClass callingClass;
callingClass.hello();
4 голосов
/ 19 марта 2012
//classOne.h
...
        class classInsideClass{
            public:
                classInsideClass();
                void hello();
        };

Здесь вы пропустили parentehsis в конце определения конструктора.

void classOne::classInsideClass::hello(){
    cout << "Hello" <<endl;
}

Здесь тип возвращаемого значения функции отсутствует, а кавычки должны находиться вокруг строки.

Удачи!

2 голосов
/ 19 марта 2012

Попробуйте:

//main.cpp
classOne::classInsideClass internalClassObject;
internalClassObject.hello();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...