C++ 不完整类型的无效使用';类别…';

C++ 不完整类型的无效使用';类别…';,c++,class,pointers,inheritance,C++,Class,Pointers,Inheritance,我一直在使用一个设置类,该类可以从文件加载设置,如果该文件不存在,则可以加载默认设置。 我的想法是有一个CSettings类来处理所有设置和文件查询。和一个CDefaultSettings类,该类存储所有默认设置。 两个类都必须具有对枚举集的访问权限 我得到的错误是: Settings.cpp: In member function 'std::string CSettings::GetSetting(const CSettings::TProgramSetting&)': Settin

我一直在使用一个设置类,该类可以从文件加载设置,如果该文件不存在,则可以加载默认设置。 我的想法是有一个CSettings类来处理所有设置和文件查询。和一个CDefaultSettings类,该类存储所有默认设置。 两个类都必须具有对枚举集的访问权限

我得到的错误是:

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);
                            ^
谁能告诉我我做错了什么

我的文件:

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;
}
默认设置.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);
};
#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);
};

您的
Settings.cpp
文件似乎缺少一个
#include“DefaultSettings.h”

另外,请确保添加一个包含护卫的la

#ifndef SETTINGS_H 
#define SETTINGS_H
...
#endif`

进入
settings.h
(通常在每个标题中),否则它将被包括在
settings.cpp的
包含“settings.h”
和包含在
DefaultSettings.h
中,产生重复的定义。

settings.cpp>文件似乎缺少一个
包含“DefaultSettings.h”

另外,请确保添加一个包含护卫的la

#ifndef SETTINGS_H 
#define SETTINGS_H
...
#endif`
进入
settings.h
(通常在每个标题中),否则它将从
#include“settings.h”
进入
settings.cpp
,并从include in
DefaultSettings.h
进入,产生重复的定义

#ifndef SETTINGS_H 
#define SETTINGS_H
...
#endif`