gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:50:44 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com