Ошибка, когда класс наследует другой класс в файле заголовка в C ++ - PullRequest
0 голосов
/ 12 мая 2018

// заголовочный файл

#include <exception>
#ifndef CRYPTSERVEXCEPTION_H
#define CRYPTSERVEXCEPTION_H


class cryptServException
{
public:
//these are classes defined in a class 
class CantOpenForEncryption : public std::exception
{
public:

    const char* what();
};


class DecryptKeyMismatch : public std::exception
{

public :

const char* what();
};

#endif // CRYPTSERVEXCEPTION_H

есть неявный конструктор, который выдает ошибку. Я просто не могу понять причину, так как мы можем оставить тело конструктора пустым, если в нем есть какой-то код, я не знаю, что должно, надеюсь Теперь у вас есть проблема.

// файл CPP

#include "cryptServException.h"
//rest are just classes that are for exceptions
 cryptServException::cryptServException()
 {
 // this constructor declaration gives the error : definition of implicitly- declared 'constexpr myException::myException()'|
 }
//this is just a class in another class
cryptServException::CantOpenForEncryption : public exception
{

public :

const char* what()
{
    return " Can't Open File For Encryption ";
}
};

//this is just a class in another class
cryptServException::DecryptKeyMismatch : public exception
{

public :

const char* what()
{
    return " Incorrect Decryption Key ";
}
};

Я не могу определить причину ошибки для вышеупомянутого неявного конструктора.

спасибо за помощь

Подскажите, пожалуйста, если я добавлю конструктор в файл .cpp, какой код должен быть помещен в его тело

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

решение

  1. удаление объявления конструктора из файла cpp, я ошибался в том, что объявление конструктора было автоматически сгенерированным заглушкой, и я его проигнорировал.

  2. также нет необходимости объявлять класс в файле .cpp, просто используйте полное имя метода и реализуйте его в соответствии с предложением @ WhozCraig.

const char *myException::CantOpen::what() const { return "Can't Open File For Encryption"; }

всем вам очень помогли

спасибо

0 голосов
/ 12 мая 2018

Ошибка означает, что токен exception в данный момент неизвестен компилятору.Он ожидает увидеть имя класса в этой точке, однако нет класса с именем exception, объявленного выше.

Чтобы исправить это, добавьте #include <exception> в файл заголовка (если вы имеете в виду std::exception, изкурс).Возможно, в вашем исходном файле этот файл включен косвенно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...