c++ - 无效使用不完整类型 'class...'

标签 c++ class pointers inheritance

我一直在研究一个设置类,它可以从文件加载设置或在该文件不存在时加载默认设置。 我的想法是有一个 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);
                            ^

谁能告诉我我做错了什么

我的文件:

主要.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);
};

设置.cpp

#include "Settings.h"

std::string CSettings::GetSetting(const CSettings::TProgramSetting& aProgramSetting)
{
    // As a test, return a default setting
    return iDefaultSettings->GetDefaultSetting(aProgramSetting);
}

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

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

最佳答案

您的 Settings.cpp 文件似乎缺少 #include "DefaultSettings.h"

另外一定要添加 include guards a la

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

进入settings.h(通常在每个标题中),否则它将包含在 #include "Settings.h" 中的 settings.cppDefaultSettings.h 中的 include 产生重复的定义。

关于c++ - 无效使用不完整类型 'class...',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46624530/

相关文章:

c - 为什么我在不使用 malloc() 分配后不必使用 free()

将 void 指针转换为指向 A 类型指针的指针以及取消引用与将 void 指针转换为 A 类型 : Why?

c - 使用指针将字符串从源附加到目标

c++ - 从 unordered_map 存储和检索后对象发生变化

For 循环中的 C++ 段错误

php - 如何在 PHP 中设置类变量?

Python Django 如何在views.py 中获取登录用户的值?

c++ - 尝试初始化位于区域结构内的边缘结构。我怎么做?

c++ - 如何将 boost 与 Xcode 链接起来

c++ - 什么时候在 C++ 中使用 struct over class