I've been working on a settings class which can load settings from a file or load default settings if this file not exists. My idea is to have a CSettings class which handles all settings and file queries. And a CDefaultSettings class which stores all the default settings. Both classes must have access to an enum set.
The error i'm getting is:
Settings.cpp: In member function 'std::string CSettings::GetSetting(const CSettings::TProgramSetting&)':
Settings.cpp:6:28: error: invalid use of incomplete type 'class CDefaultSettings'
return iDefaultSettings->GetDefaultSetting(aProgramSetting);
^
Who can tell me what I'm doing wrong
My files:
main.cpp
#include <iostream>
#include <string>
#include "Settings.h"
int main()
{
CSettings programSettings;
std::string setting = programSettings.GetSetting(CSettings::TProgramSetting::Setting1);
std::cout << setting << std::endl;
return 0;
}
Settings.h
#include <map>
#include <string>
class CDefaultSettings;
class CSettings
{
public:
typedef enum {
Setting1,
Setting2,
Setting3
} TProgramSetting;
private:
CDefaultSettings *iDefaultSettings;
public:
std::string GetSetting(const CSettings::TProgramSetting& aProgramSetting);
};
Settings.cpp
#include "Settings.h"
std::string CSettings::GetSetting(const CSettings::TProgramSetting& aProgramSetting)
{
// As a test, return a default setting
return iDefaultSettings->GetDefaultSetting(aProgramSetting);
}
DefaultSettings.h
#include <map>
#include "Settings.h"
class CDefaultSettings
{
public:
typedef std::map<CSettings::TProgramSetting, std::string> TDefaultProgramSettingCollection;
TDefaultProgramSettingCollection iDefaultProgramSettingCollection;
public:
void LoadDefaultSettings();
std::string GetDefaultSetting(const CSettings::TProgramSetting& aProgramSetting);
};
DefaultSettings.cpp
#include "DefaultSettings.h"
void CDefaultSettings::LoadDefaultSettings()
{
iDefaultProgramSettingCollection[CSettings::TProgramSetting::Setting1] = "Default setting 1";
iDefaultProgramSettingCollection[CSettings::TProgramSetting::Setting2] = "Default setting 1";
iDefaultProgramSettingCollection[CSettings::TProgramSetting::Setting3] = "Default setting 1";
}
std::string CDefaultSettings::GetDefaultSetting(const CSettings::TProgramSetting& aProgramSetting)
{
return iDefaultProgramSettingCollection[aProgramSetting];
}
It seems that your Settings.cpp
file is missing an #include "DefaultSettings.h"
Also be sure to add include guards a la
#ifndef SETTINGS_H
#define SETTINGS_H
...
#endif`
Into settings.h
(generaly in every header), otherwise it will be included from #include "Settings.h"
in settings.cpp
and from the include in DefaultSettings.h
yielding duplicate definitions.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.