Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2018, 13:38   #1
marluna
Пользователь
 
Регистрация: 15.12.2016
Сообщений: 50
По умолчанию warning C4091

Код:
#pragma once

#include "CommonLogic/ServerTabfileLoader.h"
#include "System/Collections/KMapByVector.h"
#include "CommonLogic/GlobalFunction.h"


template <class TManager, class TKeyType1, class TKeyType2, class TConfig, int NGroupNum=128, int NListNum=128>
class CCfg2KeyMgrTemplate : public KSingleton<TManager>
{
public:
	static const int STEP_DIV = 4;
	typedef KMapByVector<TKeyType2, TConfig*> TDataList;
	typedef struct SDataListNode : public System::Memory::KPortableStepPool<SDataListNode, NGroupNum>
	{
		SDataListNode() : DataList(NListNum, NListNum/STEP_DIV) {}
		TDataList DataList;
	};
	typedef KMapByVector<TKeyType1,SDataListNode*> TDataMap;

public:
	CCfg2KeyMgrTemplate() : m_DataMap(NGroupNum, NGroupNum/STEP_DIV) {}
	~CCfg2KeyMgrTemplate() { this->Clear(); }

public:
	BOOL LoadTable(const char* pFilePath);

	const TDataList* GetGroup(const TKeyType1& keyValue) const
	{
		typename TDataMap::const_iterator iter = m_DataMap.find(keyValue);
		if (iter != m_DataMap.end())
		{
			return &(iter->second->DataList);
		}
		return NULL;
	}

	const TConfig* GetConfig(const TKeyType1& key1, const TKeyType2 key2) const
	{
		const TDataList* pList = GetGroup(key1);
		if (pList)
		{
			typename TDataList::const_iterator iter = pList->find(key2);
			if (iter != pList->end())
			{
				return iter->second;
			}
		}
		return NULL;
	}

	const TDataMap* GetAllData() const { return &m_DataMap; }

	BOOL HasGroup(const TKeyType1& keyValue) const
	{
		return m_DataMap.find(keyValue) != m_DataMap.end();
	}

	BOOL Has(const TKeyType1& key1, const TKeyType2& key2)
	{
		return GetConfig(key1, key2) != NULL;
	}

protected:
	void Clear()
	{
		for (typename TDataMap::iterator iter = m_DataMap.begin(); iter != m_DataMap.end(); ++iter)
		{
			for (int i = 0; i < iter->second->DataList.size(); ++i)
			{
				TConfig::Free(iter->second->DataList[i]);
			}
			SDataListNode::Free(iter->second);
		}
		m_DataMap.clear();
	}

protected:
	TDataMap m_DataMap;
};

template <class TManager, class TKeyType1, class TKeyType2, class TConfig, int NGroupNum, int NListNum>
BOOL CCfg2KeyMgrTemplate<TManager, TKeyType1, TKeyType2, TConfig, NGroupNum, NListNum>::LoadTable(const char* pFilePath)
{
	ASSERT_RETURN(pFilePath, FALSE);
	CServerTabfileLoader& loader = CServerTabfileLoader::GetInstance();
	KTabFile2* pTabFile = loader.GetFileReader(pFilePath);
	if (NULL == pTabFile)
	{
		AssertFile(pFilePath);
		Log(LOG_ERROR, "[ERROR] LoadTable from %s failed", pFilePath);
		return FALSE;
	}

	this->Clear();

	INT nRet = 0;
	TConfig* pConfig = NULL;
	typename TDataMap::iterator iter;
	TKeyType1 key1;
	TKeyType2 key2;
	for (INT nLine = 2; nRet = pTabFile->ReadLine(); ++nLine)
	{
		if (nRet == -1)
		{
			loader.CloseFileReader(pTabFile);
			AssertFile(pFilePath);
			return FALSE;
		}

		pConfig = TConfig::Alloc();
		if (pConfig->ReadItem(*pTabFile))
		{
			key1 = pConfig->GetKey1();
			key2 = pConfig->GetKey2();
			if (GetConfig(key1, key2) == NULL)
			{
				if (GetGroup(key1) == NULL)
				{
					iter = m_DataMap.insert_unique(key1, SDataListNode::Alloc());
				}
				iter->second->DataList.insert_unique(key2, pConfig);
				continue;
			}
			else
			{
				Log(LOG_ERROR, "[ERROR] LoadTable from %s failed, line:%d, multi key, key1:%d, key2:%d", pFilePath, nLine, key1, key2);
			}
		}

		TConfig::Free(pConfig);
		this->Clear();
		Log(LOG_ERROR, "[ERROR] LoadTable from %s failed, line:%d", pFilePath, nLine);
		return FALSE;
	}
	loader.CloseFileReader(pTabFile);
	return TRUE;
}
(18): warning C4091: typedef : пропускается слева от "CCfg2KeyMgrTemplate<XCfgBuffLevelM gr,DWORD,BYTE,XCfgBuffLevel,64,64>: :SDataListNode", когда ни одна переменная не объявлена
(80): note: выполняется компиляция ссылки на экземпляр шаблон класс "CCfg2KeyMgrTemplate<TManager,TKeyT ype1,TKeyType2,TConfig,NGroupNum,NL istNum>"
help
marluna вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Warning 1 warning C4996: 'scanf': This function or variable may be unsafe. Что это за баг такой? ( С ) dannae Помощь студентам 10 08.10.2013 16:49
Warning ошибки record222 PHP 10 01.07.2012 00:24
Warning: mysql_fetch_array() empireofgods Помощь студентам 1 22.05.2011 13:45
Очень ВАЖНО!!!<<WARNING>> Aliance Общие вопросы C/C++ 1 11.11.2008 21:08
Warning LeoN Общие вопросы Delphi 10 11.02.2008 13:32